1.java連接數據庫
1.1加載驅動類
導入jar文件,jar都是class
右擊項目名----->properties---->JavaBuildPath---->Libraries---->add external jar
常用類如下:
java.sql.Connection;
java.sql.DriverManager;
java.sql.Statement;
例子如下
package lesson1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcDemo1 {
public static void main(String[] args) {
try {
//1.加載驅動類
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.獲得連接 java.sql.Connection
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@PC1:1521:ORACLE","scott","tiger");
//System.out.println(con);
//3.執行sql語句 java.sql.Statement
Statement stmt = con.createStatement();
//4.執行查詢語句--->查詢得到的是結果集java.sql.ResultSet
String sql = "select ename from emp";
ResultSet rs =stmt.executeQuery(sql);
//5.訪問結果集
while(rs.next()){
//System.out.println(rs.getString(1));
//關閉資源---->異常後面要細緻處理
System.out.println(rs.getString("ename"));
}
rs.close();
stmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
運行結果如下
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
把數據庫的連接和資源的關閉操作進行包裝JdbcUtil
因爲每個人的地址都不一樣,建立了一個properties文件,將信息放在該文件中
將來不同的人使用只要更改properties文件即可
properties如下
driverClass=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@PC1:1521:ORACLE
user=scott
pass=tiger
代碼如下
package lesson1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JdbcUtil {
private static Properties prop = new Properties();
static{
try {
prop.load(JdbcUtil.class.getResourceAsStream("/database.properties"));
} catch (Exception e) {
// TODO: handle exception
}
}
public static Connection getConn(){
try {
Class.forName(prop.getProperty("driverClass"));
Connection con = DriverManager.getConnection(
prop.getProperty("url"),prop.getProperty("user")
,prop.getProperty("pass"));
return con;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static void close(Connection con ,Statement stmt,ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(con!=null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
2.把針對表的操作進行包裝DAO
一張表----類 對應(表—>類 列---->屬性 記錄----->對象)
就是將java對數據庫的操作封裝在DAO中,代碼如下
package lesson1;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class UserDao {
//增加一條記錄
public int addUser(User user) {
Connection con = null;
Statement stmt = null;
int n = 0;
try {
con = JdbcUtil.getConn();
stmt = con.createStatement();
String sql = "insert into bbs_user(id,username,userpass,email)" + " values(" + user.getId() + ",'"
+ user.getUsername() + "','" + user.getUserpass() + "','" + user.getEmail() + "')";
n = stmt.executeUpdate(sql);
} catch (Exception e) {
e.printStackTrace();
}finally{
JdbcUtil.close(con, stmt, null);
}
return n;
}
//查詢所有
public List<User> getAll(){
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
ArrayList<User> users = new ArrayList<User>();
try {
con = JdbcUtil.getConn();
stmt = con.createStatement();
String sql = "select* from bbs_user";
rs = stmt.executeQuery(sql);
while(rs.next()){
User user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setUserpass(rs.getString("userpass"));
user.setEmail(rs.getString("email"));
users.add(user);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
JdbcUtil.close(con, stmt, rs);
}
return users;
}
}
測試代碼
package lesson1;
import java.util.List;
public class JdbcDemo4 {
public static void main(String[] args) {
//測試增加一條記錄
UserDao ud = new UserDao();
/*User user = new User(1001,"tianqi","1234tian","[email protected]");
int n = ud.addUser(user);
System.out.println(n);*/
//測試查詢所有
List<User>users = ud.getAll();
for(User user:users){
System.out.println(user);
}
}
}
結果如下
User [id=1001, username=tianqi, userpass=1234tian, [email protected]]
User [id=1002, username=zhangsan, userpass=zzzs123, [email protected]]
User [id=1003, username=lisi, userpass=237162, [email protected]]
User [id=1004, username=zhangsan, userpass=zsan, [email protected]]
3.java.sql.Statement------>java.sql.PreparedStatement
java.sql.PreparedStatement
sql語句中需要傳遞的值可以使用?佔位符號表示,提高效率。這樣可以起到預編譯的效果,性能較好,防止sql注入;