首先我們要下載JDBC的jar包,本項(xiàng)目中jar放在了lib目錄中,大家可以直接使用我這個(gè)mysql-connector-java-5.1.42-bin.jar包。
然后添加一個(gè)Main,使用JDBC鏈接MySQL數(shù)據(jù)庫(kù),創(chuàng)建表結(jié)構(gòu)并添加數(shù)據(jù)和查詢數(shù)據(jù)
具體代碼:
public class Main{
public static void main(String[] args) throws Exception {
connectMySQLTest01();
connectMySQLTest02();
connectMySQLTest03();
}
//鏈接數(shù)據(jù)庫(kù),創(chuàng)建student表,并添加內(nèi)容
private static void connectMySQLTest01() throws SQLException {
Connection conn = null;
String sql;
// MySQL的JDBC URL編寫方式:jdbc:mysql://主機(jī)名稱:連接端口/數(shù)據(jù)庫(kù)的名稱?參數(shù)=值
// 避免中文亂碼要指定useUnicode和characterEncoding
// 執(zhí)行數(shù)據(jù)庫(kù)操作之前要在數(shù)據(jù)庫(kù)管理系統(tǒng)上創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),名字自己定,
// 下面語(yǔ)句之前就要先創(chuàng)建javademo數(shù)據(jù)庫(kù)
String url = "jdbc:mysql://localhost:3306/test?"
+ "user=root&password=123456&useUnicode=true&characterEncoding=UTF8";
try {
// 之所以要使用下面這條語(yǔ)句,是因?yàn)橐褂肕ySQL的驅(qū)動(dòng),所以我們要把它驅(qū)動(dòng)起來(lái),
// 可以通過(guò)Class.forName把它加載進(jìn)去,也可以通過(guò)初始化來(lái)驅(qū)動(dòng)起來(lái),下面三種形式都可以
Class.forName("com.mysql.jdbc.Driver");// 動(dòng)態(tài)加載mysql驅(qū)動(dòng)
// or:
// com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver();
// or:
// new com.mysql.jdbc.Driver();
System.out.println("成功加載MySQL驅(qū)動(dòng)程序");
// 一個(gè)Connection代表一個(gè)數(shù)據(jù)庫(kù)連接
conn = DriverManager.getConnection(url);
// Statement里面帶有很多方法,比如executeUpdate可以實(shí)現(xiàn)插入,更新和刪除等
Statement stmt = conn.createStatement();
sql = "create table student(NO char(20),name varchar(20),primary key(NO))";
int result = stmt.executeUpdate(sql);// executeUpdate語(yǔ)句會(huì)返回一個(gè)受影響的行數(shù),如果返回-1就沒(méi)有成功
if (result != -1) {
System.out.println("創(chuàng)建數(shù)據(jù)表成功");
sql = "insert into student(NO,name) values('2012001','陶偉基')";
result = stmt.executeUpdate(sql);
sql = "insert into student(NO,name) values('2012002','周小俊')";
result = stmt.executeUpdate(sql);
sql = "select * from student";
ResultSet rs = stmt.executeQuery(sql);// executeQuery會(huì)返回結(jié)果的集合,否則返回空值
System.out.println("學(xué)號(hào)\t姓名");
while (rs.next()) {
System.out
.println(rs.getString(1) + "\t" + rs.getString(2));// 入如果返回的是int類型可以用getInt()
}
}
} catch (SQLException e) {
System.out.println("MySQL操作錯(cuò)誤");
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
conn.close();
}
}
//鏈接數(shù)據(jù)庫(kù),查詢數(shù)據(jù)庫(kù)student表結(jié)構(gòu)的內(nèi)容
private static void connectMySQLTest02() throws SQLException {
Connection conn = null;
String sql;
// MySQL的JDBC URL編寫方式:jdbc:mysql://主機(jī)名稱:連接端口/數(shù)據(jù)庫(kù)的名稱?參數(shù)=值
// 避免中文亂碼要指定useUnicode和characterEncoding
// 執(zhí)行數(shù)據(jù)庫(kù)操作之前要在數(shù)據(jù)庫(kù)管理系統(tǒng)上創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),名字自己定,
// 下面語(yǔ)句之前就要先創(chuàng)建javademo數(shù)據(jù)庫(kù)
String url = "jdbc:mysql://localhost:3306/test?"
+ "user=root&password=123456&useUnicode=true&characterEncoding=UTF8";
try {
// 之所以要使用下面這條語(yǔ)句,是因?yàn)橐褂肕ySQL的驅(qū)動(dòng),所以我們要把它驅(qū)動(dòng)起來(lái),
// 可以通過(guò)Class.forName把它加載進(jìn)去,也可以通過(guò)初始化來(lái)驅(qū)動(dòng)起來(lái),下面三種形式都可以
Class.forName("com.mysql.jdbc.Driver");// 動(dòng)態(tài)加載mysql驅(qū)動(dòng)
// or:
// com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver();
// or:
// new com.mysql.jdbc.Driver();
System.out.println("成功加載MySQL驅(qū)動(dòng)程序");
// 一個(gè)Connection代表一個(gè)數(shù)據(jù)庫(kù)連接
conn = DriverManager.getConnection(url);
// Statement里面帶有很多方法,比如executeUpdate可以實(shí)現(xiàn)插入,更新和刪除等
Statement stmt = conn.createStatement();
sql = "create table student(NO char(20),name varchar(20),primary key(NO))";
//查詢數(shù)據(jù)庫(kù)student表結(jié)構(gòu)數(shù)據(jù)
sql = "select * from student";
ResultSet rs = stmt.executeQuery(sql);// executeQuery會(huì)返回結(jié)果的集合,否則返回空值
System.out.println("學(xué)號(hào)\t姓名");
while (rs.next()) {
System.out
.println(rs.getString(1) + "\t" + rs.getString(2));// 入如果返回的是int類型可以用getInt()
}
} catch (SQLException e) {
System.out.println("MySQL操作錯(cuò)誤");
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
conn.close();
}
}
//封裝一個(gè)DBHelper類來(lái)打開(kāi)和關(guān)閉數(shù)據(jù)庫(kù)
private static void connectMySQLTest03() {
String sql = "select * from student";//SQL語(yǔ)句
DBHelper db1 = new DBHelper(sql);//創(chuàng)建DBHelper對(duì)象
try {
ResultSet ret = db1.pst.executeQuery();//執(zhí)行語(yǔ)句,得到結(jié)果集
while (ret.next()) {
System.out
.println(ret.getString(1) + "\t" + ret.getString(2));// 入如果返回的是int類型可以用getInt()
}
ret.close();
db1.close();//關(guān)閉連接
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Cmd命令行窗口中,MySQL表中數(shù)據(jù)亂碼問(wèn)題
百度了一下。。有說(shuō)將cmd字符編碼用chcp命令改為65001(utf8字符編碼),可這樣之后根本無(wú)法輸入中文,查詢出的中問(wèn)結(jié)果依舊亂碼
其實(shí),只要保證cmd客戶端和MySQL兩者編碼一致即可。
但現(xiàn)實(shí)是cmd默認(rèn)的是gbk(cmd屬性可以看到中文操作系統(tǒng)下面是gbk編碼),而mysql一般是utf8(我的也是),之前一直進(jìn)入誤區(qū),想要更改cmd的字符編碼,可是并不能行得通。網(wǎng)友中提到在mysql中關(guān)于客戶端編碼問(wèn)題,只需在cmd里告訴mysql服務(wù)器我客戶端這邊編碼和想要的結(jié)果集編碼即可。
具體步驟:
1、win+r進(jìn)入cmd,然后切到mysql安裝目錄的bin文件夾下(或者直接打開(kāi)我的電腦找到bin文件夾,在上方地址欄輸入cmd);
2、輸入 mysql -uroot -p,然后按提示輸入密碼計(jì)入數(shù)據(jù)庫(kù);
3、設(shè)置編碼;
此時(shí)輸入 set character_set_client=gbk;告訴我客戶端這邊的文字編碼
再輸入set character_set_results=gbk; 告訴mysql希望返回的結(jié)果集編碼;實(shí)驗(yàn)中發(fā)現(xiàn)只要客戶端是gbk編碼的,只要設(shè)置這個(gè)就可以解決亂碼這個(gè)問(wèn)題。
還有另外一個(gè)好用的命令可以同時(shí)達(dá)到上面兩條指令的效果:
set charset gbk;//和上面兩個(gè)效果一致。
大功告成!去插入中文字段試試吧!
項(xiàng)目地址:傳送門