java mysql数据库编程_java JDBC数据库(mysql)编程
什么是JDBC
? JDBC(Java Data Base Connectivity,Java數(shù)據(jù)庫連接)
? 是一種用于執(zhí)行SQL語句的Java API,為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問
? 它由一組用Java語言編寫的類和接口組成
JDBC訪問數(shù)據(jù)庫步驟
? 1:加載一個(gè)Driver驅(qū)動(dòng)
要通過JDBC與數(shù)據(jù)庫連接,先要加載JDBC驅(qū)動(dòng)Driver,這個(gè)要想導(dǎo)入一個(gè)mysql-connector-java.jar包;各版本
不同的JDK版本可能對(duì)應(yīng)不同的jar包,如果不行可以換一個(gè)jar包試一下;具體不同的編輯器導(dǎo)入jar包的方式可能不一樣,所以導(dǎo)入包的方式不懂的話可以到網(wǎng)上搜一下;
java加載mysql數(shù)據(jù)庫Driver驅(qū)動(dòng)的形式:
5.XXX之前版本: Class.forName("com.mysql.JDBC.Driver");
6.XXX版本之后的就是? ??Class.forName("com.mysql.cj.JDBC.Driver")
? 2:創(chuàng)建數(shù)據(jù)庫連接(Connection)
與數(shù)據(jù)庫建立連接的方法是調(diào)用DriverManager.getConnection(String url, String user, String password )方法
? Connection conn=null;
? String url="jdbc:mysql://localhost:3306/login"; // 格式是 "jdbc:mysql://IP地址:端口號(hào)/數(shù)據(jù)庫名稱"
? String user=“root"; //用戶名
? String password=“7820170"; //密碼
? conn = DriverManager.getConnection(url, user, password); //建立連接
? 3 :創(chuàng)建SQL命令發(fā)送器Statement對(duì)象
有三種 Statement對(duì)象:
? Statement:用于執(zhí)行不帶參數(shù)的簡(jiǎn)單SQL語句;(這個(gè)對(duì)象要直接傳一個(gè)字符串來操作數(shù)據(jù)庫,雖然可以拼接字符串,但不方便,還有sql注入的危險(xiǎn);)
String sql="select * from user where id=1";//創(chuàng)建sql語句
Statement stmt=conn.createStatement();//創(chuàng)建Statement對(duì)象
stmt.execute(sql);//發(fā)送sql語句,對(duì)于發(fā)送還有其他的方法,有不同的功能,后面再講
? PreparedStatement(從 Statement 繼承):用于執(zhí)行帶或不帶參數(shù)的預(yù)編譯SQL語句;(這個(gè)對(duì)象可以,通過傳參數(shù)的方式來完成sql語句的編寫,比較方便和安全,但這個(gè)SQL語句要預(yù)編譯,對(duì)于操作大量SQL語句不合適,如果需要操作大量SQL語句還是使用Statement比較好)
String sql="insert into students (name,age,school) values (?,?,?)";//?表示占位符
PreparedStatement ps =conn.prepareStatement(sql);//因?yàn)?PerparedStatement 中的 SQL 語句數(shù)據(jù)庫需要進(jìn)行預(yù)編譯和緩存,
因此要在創(chuàng)建 PerparedStatement 對(duì)象時(shí)給出 SQL 語句
ps.setString(1, "hhh");//傳參數(shù),從1開始,而不是從0開始
ps.setString(2, "18");
ps.setString(3, "廣財(cái)");
System.out.println("成功插入一條信息");
ps.execute();//提交
? CallableStatement(從PreparedStatement 繼承):用于執(zhí)行數(shù)據(jù)庫存儲(chǔ)過程的調(diào)用。
這個(gè)暫時(shí)不清楚,就不寫了
? 4:通過Statement發(fā)送SQL命令并得到結(jié)果
ResultSetexecuteQuery(String sql); 執(zhí)行SQL查詢,并返回ResultSet 對(duì)象。intexecuteUpdate(String sql); 可執(zhí)行增,刪,改,返回執(zhí)行受到影響的行數(shù)。booleanexecute(String sql); 可執(zhí)行任何SQL語句,返回一個(gè)布爾值,表示是否返回ResultSet 。
? 5:處理結(jié)果(select語句)
返回的RsultSet如何遍歷:
ResultSet rs=ps.executeQuery();//返回的是一個(gè)迭代對(duì)象while(rs.next()) {//判斷是否還有可以迭代的對(duì)象
System.out.println(rs.getInt(1)+"---"+rs.getString(2)+"---"+rs.getInt(3));//getInt(1)返回第一列的int行的數(shù)據(jù),如果數(shù)據(jù)類型不對(duì)會(huì)報(bào)錯(cuò)當(dāng)然也可以直接傳第一列的名稱,比如:getInt("id");
}
? 6:關(guān)閉數(shù)據(jù)庫資源
? 作為一種好的編程風(fēng)格,應(yīng)在不需要Statement對(duì)象和Connection對(duì)象時(shí)顯式地關(guān)閉它們。關(guān)閉Statement對(duì)象和Connection對(duì)象的語法形式為:
? public void close() throws SQLException
? 用戶不必關(guān)閉ResultSet。當(dāng)它的 Statement 關(guān)閉、重新執(zhí)行或用于從多結(jié)果序列中獲取下一個(gè)結(jié)果時(shí),該ResultSet將被自動(dòng)關(guān)閉。
? 注意:要按先ResultSet結(jié)果集,后Statement,最后Connection的順序關(guān)閉資源,因?yàn)镾tatement和ResultSet是需要連接是才可以使用的,所以在使用結(jié)束之后有可能其他的Statement還需要連接,所以不能先關(guān)閉Connection。
try{
rs.close();
}catch(SQLException e) {//TODO Auto-generated catch block
e.printStackTrace();
}try{
ps.close();
}catch(SQLException e) {//TODO Auto-generated catch block
e.printStackTrace();
}try{
conn.close();
}catch(SQLException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
總結(jié)
以上是生活随笔為你收集整理的java mysql数据库编程_java JDBC数据库(mysql)编程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 太好了 春节前油价有变!加满一箱油可省一
- 下一篇: mysql 查询分析器中使用if_查询分