在java中對數據庫實行操作,對不同的數據庫需要導入不同的數據庫驅動(提供SQL操作的jar包)。我在這裏使用的數據庫是SQL server 2008 。也在網上下載了相適配的jar包。
下載了驅動並加入本地工程的依賴庫後,就可以使用其中的API了。
不過既然是操作數據庫,我就先建立好了一個數據庫並新建表student_info。真實名字碼掉。
現在eclipse中,對每一個student,都有相同的屬性,故建立一個實體類student.java
public class Student { private String Sno = null; private String name = null; private String sex = null; private String birth = null; private String ClassNo = null; private String Entrance_date = null; private String Home_Addre = null; private String sdept = null;//系別 private String postcode = null; public String getSno() { return Sno; } public void setSno(String sno) { Sno = sno; } ··············省略一批get和set方法················· public String getPostcode() { return postcode; } public void setPostcode(String postcode) { this.postcode = postcode; } }
既然想要操作數據庫,那就要獲取到數據庫的連接。新建一個類DB_connectBean專門獲取連接,先通過反射把驅動導入,連接對象Connection通過DriverManager的getConnection方法產生。需要指定數據庫的URL,本例中是本地數據庫——
public class DB_ConnectBean {
private static Connection cnt = null;
/**
* 靜態塊:程序運行最早執行的代碼塊
*/
static{
try {
//加載JDBC驅動
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//獲得數據庫的鏈接
cnt = DriverManager.getConnection(
"jdbc:sqlserver://localhost:1433;integratedSecurity=true;DatabaseName=Student_info");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getConnection(){
return cnt;
}
// //測試用的
// public static void main(String[] args) throws Exception {
// connect();
// }
}
定義了靜態方法返回對數據庫的連接Connection對象,寫一個類來實現對數據庫的增刪改查方法。需要調用到這個Bean——
public class Student_info_Dao {
public void addStudent(){
//add學生的操作
}
public void delStudent(){
//delete學生的操作
}
public void upgradeStudent(){
//更新學生的操作
}
public List<Student> queryStudent() throws Exception{
//返回所有學生信息的操作。
Connection cnt = DB_ConnectBean.getConnection();
Statement stmt = cnt.createStatement();
ResultSet rs = stmt.executeQuery("select * from Student_info");
List<Student> students = new ArrayList<>();
Student s = null;
while(rs.next()){
s = new Student();
s.setName(rs.getString("Sname"));
s.setSex(rs.getString("Sex"));
s.setSno(rs.getString("Sno"));
s.setBirth(rs.getString("Birth").substring(0, 11));
s.setClassNo(rs.getString("Classno"));
s.setEntrance_date(rs.getString("Entrance_date"));
s.setHome_Addre(rs.getString("Home_addr"));
s.setSdept(rs.getString("sdept"));
s.setPostcode(rs.getString("postcode"));
// System.out.println("姓名:???"+rs.getString("Sname"));
students.add(s);
}
return students;
}
public Student GetStudent(){
//查詢特定學生的操作,可指定參數
return null;
}
}
可以看到在java中執行SQL語句是先通過connection對象創建一個statement對象,statement對象的execute方法可以填入想要執行的SQL語句,返回的結果保存在ResultSet對象中。
然後寫一個主類來運行顯示一下結果,看能否正確從數據庫中select到想要的結果並輸出在控制檯:
public class Action {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Student_info_Dao dao = new Student_info_Dao();
List<Student> students = dao.queryStudent();
for (Student student : students) {
System.out.println("學號:"+student.getSno()+"------姓名:"+student.getName()+"------性別:"+student.getSex()
+"------生日:"+student.getBirth()+"------籍貫:"+student.getHome_Addre());
}
}
}
運行,在控制檯下獲取到了信息。