JDBC體系
JDBC:Java Database Connectivity
SQLite這種也是支持的,但Java8開始不支持ODBC了。
關鍵的類或接口
- Connection 連接
- Statement 語句 或 PreparedStatement
- ResultSet 結果集 → 可以用 next() 方法來遍歷所有的記錄
java.sql
加載驅動及連接數據庫
加載驅動程序:
Class.forName("org.sqlite.JDBC");
得到與數據庫的連接 :
String connString = "jdbc:sqlite:d:/test3.db";
Connection conn = DriverManager.getConnection(connString);
執行語句
得到一個Statement對象 :
Statement stat = conn.createStatement();
1
執行非查詢:
stat.executeUpdate("delete from DemoTable;");
查詢數據庫得到記錄集:
ResultSet rs = stat.executeQuery("select * from people;");
結果集遍歷
System.out.println("Display all results:");
while(rs.next()) {
int theInt= rs.getInt("test_id");
String str = rs.getString("test_val");
System.out.println("\\ttest_id= " + theInt + "\\tstr = " + str);
}
PreparedStatement
PreparedStatement表示經過編譯的語句~
如果多次使用同樣的語句,執行速度略快一些(聯想到native沒)
可以方便地加上參數
更安全,避免sql注入攻擊
補充——JDBC連接SQLite數據庫
import java.sql.*;
public class JDBC4Sqlite {
public static void main(String[] args) throws Exception {
Class.forName("org.sqlite.JDBC");
String connString = "jdbc:sqlite:d:/test3.db";
Connection conn = DriverManager.getConnection(connString);
conn.setAutoCommit(false);
Statement stat = conn.createStatement();
//stat.executeUpdate("drop table if exists people;");
stat.executeUpdate("create table if not exists people (id char(10), name char(20), age int, gender bit ) ;");
stat.executeUpdate("insert into people values ('001', 'Tom', 18, 1);");
stat.executeUpdate("insert into people values ('002', 'Marry', 20, 0);");
stat.executeUpdate("insert into people values ('003', 'Peter', 25, 1);");
stat.executeUpdate("update people set age=age+1 whre id='003';");
conn.commit();
String sql = "select * from people;";
ResultSet rs = stat.executeQuery(sql);
while (rs.next()) {
String name = rs.getString("name");
int age = rs.getString("age");
boolean gender = rs.getBoolean(4);
System.out.printf("name = %s; occupation = %s\\n",
name, occupation);
}
rs.close();
conn.close();
}
}
閱讀更多 程序猿的內心獨白 的文章