-
Java數(shù)據(jù)庫操作
- 加載數(shù)據(jù)庫驅(qū)動(一般使用Class.forName驅(qū)動程序規(guī)范寫法的模式加載驅(qū)動)
- 加載數(shù)據(jù)庫連接驅(qū)動的標(biāo)準(zhǔn)寫法
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver);
- 加載MySQL數(shù)據(jù)庫驅(qū)動的標(biāo)準(zhǔn)寫法
Class.forName("com.mysql.jdbc.Driver);
- 加載SQL Server數(shù)據(jù)庫驅(qū)動的標(biāo)準(zhǔn)寫法
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver);
- 創(chuàng)建連接(Java中使用Connection接口描述數(shù)據(jù)庫連接,通過DriverManager類的getConnection方法返回數(shù)據(jù)庫連接)
Connection conn=null;
conn=DriverManager.getConnection(dburl,username,password);
- 創(chuàng)建狀態(tài)
PreparedStatement stmt=null;
stmt=conn.preparedStatment(sql,resultSetType,resultSetConcurrency);
- 執(zhí)行SQL語句并返回結(jié)果集(一般來說,select通過PreparedStatement狀態(tài)的executeQuery執(zhí)行笛钝,并返回結(jié)果集重罪;而insert宵溅、delete项滑、update三種DML(Data Manipulation Language)操作通過PreparedStatement狀態(tài)的executeUpdate執(zhí)行曙旭,返回int用于描述DML涉及的記錄條數(shù))
結(jié)果集游標(biāo)rs定義為ResultSet類型,初始時指向第一條記錄的上方谨读。while(rs.next())可以看成兩步操作:1.判斷下一個指向是否有記錄星持,有則返回true,反之為false烧董。2.游標(biāo)移動到下一個指向處
-
Java連接Access、MySQL數(shù)據(jù)庫操作
JDK1.8中不再包含Access橋接驅(qū)動(刪除公告:https://blogs.oracle.com/Lance/entry/removal_of_the_jdbc_odbc)
因此不再支持jdbc-odbc橋接方式胧奔,需要安裝jdk1.6環(huán)境來編譯逊移。所以這里用Access_JDBC30.jar訪問access,將Access_JDBC30.jar下載后龙填,放在jre/lib/ext文件夾中胳泉。
Access_JDBC30.jar下載地址:http://www.hxtt.com/access.zip
- SELECT查詢Access數(shù)據(jù)庫
package database;
import java.sql.*;
public class accessQuery {
public static void main(String[] args) throws SQLException{
String dburl="jdbc:Access:///C:/Users/A1718/Documents/Database1.accdb";
//原來為:dburl="jdbc:odbc:driver={Microsoft Access Driver(*.mdb,*.accdb)};"+"DBQ=D:/student.accdb";
Connection conn=null;
PreparedStatement stmt=null;
ResultSet rs=null;
int count=0;
String stuid_key="100";
double math_key=0;
try{
Class.forName("com.hxtt.sql.access.AccessDriver");
//原來為:Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
System.out.println("驅(qū)動加載成功");
conn=DriverManager.getConnection(dburl);
String sql="select * from stuinfo where id > ? and ma > ?";
stmt=conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
stmt.setString(1, stuid_key);
stmt.setDouble(2, math_key);
rs=stmt.executeQuery();
System.out.println("StuID\t"+"StuName\t"+"Math\t"+"EN\t"+"HI\t");
while(rs.next()){
System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getDouble(3)+"\t"+rs.getDouble(4)+"\t"+rs.getDouble(5)+"\t");
}
System.out.println("--------------------------------");
rs.previous();
count=rs.getRow();
System.out.println("檢索出"+count+"條記錄");
}
catch(SQLException e){
System.out.println(e);
}
catch(ClassNotFoundException e){
System.out.println("not found driver");
}
finally{
rs.close();
stmt.close();
conn.close();
System.out.println("over");
}
}
}
MySQL:
String dburl="jdbc:mysql://localhost:3306/student;
Class.forName("com.mysql.jdbc.Driver);
- INSERT、DELETE岩遗、UPDATE插入Access數(shù)據(jù)庫
if(!rs.next()){
String insertsql="insert into stuinfo values(?,?,?,?,?)";
//“delete from stuinfo where stuid=?”
//“update stuinfo set stuname=?,match=?where stuname=?”
stmt=conn.preparedStatement(insertsql);
stmt.setString(1,insert_stuid);
.
.
.
stmt.executeUpdate();
}
- 利用結(jié)果集添加扇商、刪除、更新記錄
設(shè)置ResultSet.CONCUR_UPDATABLE
//插入
rs.moveToInsertRow();
rs.updateString(1,insert_string);
.
.
.
rs.insertRow();
//刪除
rs.deleteRow();
rs.previous();