您好,登錄后才能下訂單哦!
數據庫之-------Mysql(JDBC實現&解決存儲亂碼問題)
1、亂碼問題的解決很簡單啦!
首先在建立數據庫的時候要指定字符集為utf-8,然后再進行JDBC編程的時候,在下面代碼的url后面加上參數characterEncoding即可!更多關于url參數的設置可以查看mysql官網文檔:
http://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html
package java_data_jdbc;
現只列舉幾個重要的參數,如下表所示:
參數名稱 | 參數說明 | 缺省值 | 最低版本要求 |
user | 數據庫用戶名(用于連接數據庫) | 所有版本 | |
password | 用戶密碼(用于連接數據庫) | 所有版本 | |
useUnicode | 是否使用Unicode字符集,如果參數characterEncoding設置為gb2312或gbk,本參數值必須設置為true | false | 1.1g |
characterEncoding | 當useUnicode設置為true時,指定字符編碼。比如可設置為gb2312或gbk | false | 1.1g |
autoReconnect | 當數據庫連接異常中斷時,是否自動重新連接? | false | 1.1 |
autoReconnectForPools | 是否使用針對數據庫連接池的重連策略 | false | 3.1.3 |
failOverReadOnly | 自動重連成功后,連接是否設置為只讀? | true | 3.0.12 |
maxReconnects | autoReconnect設置為true時,重試連接的次數 | 3 | 1.1 |
initialTimeout | autoReconnect設置為true時,兩次重連之間的時間間隔,單位:秒 | 2 | 1.1 |
connectTimeout | 和數據庫服務器建立socket連接時的超時,單位:毫秒。 0表示永不超時,適用于JDK 1.4及更高版本 | 0 | 3.0.1 |
socketTimeout | socket操作(讀寫)超時,單位:毫秒。 0表示永不超時 | 0 | 3.0.1 |
對應中文環境,通常mysql連接URL可以設置為:
jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk&autoReconnect=true&failOverReadOnly=false
在使用數據庫連接池的情況下,最好設置如下兩個參數:
autoReconnect=true&failOverReadOnly=false
需要注意的是,在xml配置文件中,url中的&符號需要轉義成&。比如在tomcat的server.xml中配置數據庫連接池時,mysql jdbc url樣例如下:
jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk
&autoReconnect=true&failOverReadOnly=false
3、代碼如下:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class Jdbc_01 { public static void main(String[] args) { String userName = "root"; String password = "root"; /* * 這個url的格式后面是可以帶很多參數的,詳細請參考mysql官網http://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html */ String url = "jdbc:mysql://localhost:3306?characterEncoding=utf-8&useSSL=true"; String sql1 = "Select * from Class"; String sql = "INSERT INTO Class (name,age) VALUES ('你好','21')"; try { /* * 這個驅動的寫法有兩種,兩者是繼承關系,還有是:org.gjt.mm.mysql.Driver */ Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection(url, userName, password); Statement stmt = conn.createStatement(); stmt.execute("use student;"); stmt.execute(sql); ResultSet res = stmt.executeQuery(sql1); while(res.next()){ String id = res.getString("id"); String name = res.getString("name"); int age = res.getInt("age"); System.out.println("序號: "+id + " " +"姓名: "+ name + " "+ age+"歲!"); } } catch (Exception e) { e.printStackTrace(); } } }
部分資料來源:http://elf8848.iteye.com/blog/1684414
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。