JDBC程序设计
文章目錄
- 一、實(shí)驗(yàn)?zāi)康?/li>
- 二、 實(shí)驗(yàn)內(nèi)容
- 三、程序設(shè)計(jì)思想(流程圖,或算法思想或設(shè)計(jì)方案等)
- 四、源代碼
- jdbc0.Properties配置文件數(shù)據(jù):
- 五、測(cè)試與運(yùn)行
- 六、總結(jié)
一、實(shí)驗(yàn)?zāi)康?/h2>
二、 實(shí)驗(yàn)內(nèi)容
自己任意設(shè)計(jì)一個(gè)表(如圖書(shū),商品,玩具,寵物等,不要和課內(nèi)練習(xí)相同的表),編寫(xiě)控制臺(tái)程序?qū)ζ溥M(jìn)行增刪改查操作。控制臺(tái)顯示列表菜單。如下圖所示:
三、程序設(shè)計(jì)思想(流程圖,或算法思想或設(shè)計(jì)方案等)
Mysql驅(qū)動(dòng)類型:mysql-connector-java-5.1.7-bin.jar
數(shù)據(jù)庫(kù)初始狀態(tài)如下:
List all students
find student by its id
update a student
四、源代碼
import java.util.List; import java.util.Scanner;public class Test1 {public static int flag_test;public static void main(String[] args) throws Exception {userDao user = new userDao();user.login();System.out.println("登陸成功");Scanner in = new Scanner(System.in);System.out.println("1.list all students\n2.find student by its id\n3.update a student\n4.add a new student\n5.delete an student by id");System.out.println("請(qǐng)輸入所需要進(jìn)行操作:");int number = in.nextInt();switch (number) {case 4:in = new Scanner(System.in);System.out.println("請(qǐng)輸入學(xué)號(hào):");String Sid = in.next();System.out.println("請(qǐng)輸入姓名:");String name = in.next();System.out.println("請(qǐng)輸入年齡:");int age = in.nextInt();System.out.println("請(qǐng)輸入分?jǐn)?shù):");int score = in.nextInt();user.add(Sid, name, age, score);break;case 5:System.out.println("請(qǐng)輸入學(xué)號(hào):");Sid = in.next();user.delete(Sid);break;case 3:System.out.println("請(qǐng)輸入姓名:");name = in.next();System.out.println("請(qǐng)輸入修改后分?jǐn)?shù):");score = in.nextInt();user.modify(score, name);break;case 2:in = new Scanner(System.in);System.out.println("請(qǐng)輸入ID:");Sid = in.next();User users = user.check(Sid);System.out.println(users);break;case 1:String sql = "select sid,name,age,score from Users";List<User> list = user.checkAll(User.class, sql);list.forEach(System.out::println);break;default:System.out.println("未正確選擇,goodbye");break;}} } import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; import java.sql.*; import java.util.ArrayList; import java.util.List; import java.util.Properties; import java.sql.Connection; import java.sql.DriverManager; public class userDao {public static PreparedStatement ps;public static Connection conn=null;public void login(){InputStream is=Test1.class.getClassLoader().getResourceAsStream("jdbc0.properties");if(is==null){System.out.println("空的");return ;}Properties pros=new Properties();try {pros.load(is);} catch (IOException e) {e.printStackTrace();}//1.讀取配置文件中的四個(gè)基本信息String url= pros.getProperty("url");String user=pros.getProperty("user");String password=pros.getProperty("password");String driverclass=pros.getProperty("driverClass");//2.加載驅(qū)動(dòng)try {Class.forName(driverclass);} catch (ClassNotFoundException e) {e.printStackTrace();}//3.獲取連接try {conn= DriverManager.getConnection(url,user,password);} catch (SQLException e) {e.printStackTrace();}}public void add(String sid,String NAME,int age,int score){//4.預(yù)編譯sql語(yǔ)句,返回PreparedStatement的實(shí)例String sql="insert into Users(sid,NAME,age,score) values(?,?,?,?)";PreparedStatement ps= null;try {ps = conn.prepareStatement(sql);} catch (SQLException e) {e.printStackTrace();}//5.填充占位符try {ps.setString(1,sid);ps.setString(2,NAME);ps.setInt(3,age);ps.setInt(4,score);//6.執(zhí)行操作ps.execute();//7.資源的關(guān)閉ps.close();} catch (SQLException e) {e.printStackTrace();}}public void delete(String sid){String sql="DELETE FROM Users WHERE sid=?";try {PreparedStatement ps=conn.prepareStatement(sql);ps.setString(1,sid);ps.execute();//7.資源的關(guān)閉ps.close();conn.close();} catch (SQLException e) {e.printStackTrace();}}public User check(String checks){String sql="select sid,name,age,score from Users where sid = ?";try {ps=conn.prepareStatement(sql);ps.setString(1,checks);//得到結(jié)果集ResultSet resultSet=ps.executeQuery();//處理結(jié)果集if(resultSet.next()){//判斷結(jié)果集的下一條是否有數(shù)據(jù),如果有數(shù)據(jù)返回true,并指針下移,如果返回false,指針不會(huì)下移//獲取當(dāng)前這條數(shù)據(jù)的各個(gè)字段值String id =resultSet.getString(1);String name=resultSet.getString(2);int age=resultSet.getInt(3);double score=resultSet.getDouble(4);//把屬性封裝在java類中來(lái)進(jìn)行表示User user=new User(id,name,age,score);return user;}} catch (SQLException e) {e.printStackTrace();}return new User();}public User checkss(String sql,Object...args){try {ps=conn.prepareStatement(sql);for(int i=0;i<args.length;i++){ps.setObject(i+1,args[i]);}ResultSet re=ps.executeQuery();//獲取結(jié)果集的元數(shù)據(jù)ResultSetMetaData rsmd=re.getMetaData();int columnCount=rsmd.getColumnCount();if(re.next()){User user=new User();for(int i=0;i<columnCount;i++){Object value= re.getObject(i+1);//獲取每個(gè)列的列名String columnName=rsmd.getColumnName(i+1);//給user對(duì)象指定的columnName屬性,賦值為columValueField field= null;try {field = User.class.getDeclaredField(columnName);field.setAccessible(true);field.set(user,value);} catch (Exception e) {e.printStackTrace();}}return user;}} catch (SQLException e) {e.printStackTrace();}return null;}public List<User> checkAll(Class<User> clazz,String sql,Object...args){try {ps=conn.prepareStatement(sql);for(int i=0;i<args.length;i++){ps.setObject(i+1,args[i]);}ResultSet re=ps.executeQuery();//獲取結(jié)果集的元數(shù)據(jù)ResultSetMetaData rsmd=re.getMetaData();int columnCount=rsmd.getColumnCount();//創(chuàng)建集合對(duì)象ArrayList <User> list=new ArrayList<User>();while(re.next()){User user=clazz.newInstance();for(int i=0;i<columnCount;i++){Object value= re.getObject(i+1);//獲取每個(gè)列的列名// String columnName=rsmd.getColumnName(i+1);String columnLabel=rsmd.getColumnLabel(i+1);//給user對(duì)象指定的columnName屬性,賦值為columValuetry {Field field = User.class.getDeclaredField(columnLabel);field.setAccessible(true);field.set(user,value);} catch (Exception e) {e.printStackTrace();}}list.add(user);}return list;} catch (Exception e) {e.printStackTrace();}return null;}public void modify(int score,String name){String sql="update Users set score=? where name=?";try {ps=conn.prepareStatement(sql);//5.填充占位符ps.setInt(1,score);ps.setString(2,name);//6.執(zhí)行操作ps.execute();//7.資源的關(guān)閉ps.close();} catch (SQLException e) {e.printStackTrace();}}public User seek(String sid,String NAME){String sql="select sid,name,age,score from Users where sid=?";try {ps=conn.prepareStatement(sql);//5.填充占位符ps.setString(1,sid);//6.執(zhí)行并返回結(jié)果集ResultSet resultSet =ps.executeQuery();if(resultSet.next()) {resultSet.previous();//7.處理結(jié)果集if (resultSet.next()) {//next()判斷結(jié)果集的下一條是否有數(shù)據(jù),如果有數(shù)據(jù)返回true,并指針下移;如果返回false,指針不會(huì)下移//獲取當(dāng)前這條數(shù)據(jù)的各個(gè)字段的值String id =resultSet.getString(1);String name=resultSet.getString(2);int age=resultSet.getInt(3);double score=resultSet.getDouble(4);//把屬性封裝在java類中來(lái)進(jìn)行表示User user=new User(id,name,age,score);return user;}}} catch (SQLException e) {e.printStackTrace();}return new User();} }public class User {private String sid;private String name;private Integer age;private Double score;public User(){}//全參構(gòu)造方法public User(String sid, String name, Integer age, Double score) {this.sid = sid;this.name = name;this.age = age;this.score = score;}@Overridepublic String toString(){return "Sid="+sid+"\tname="+name+"\tage="+age+"\tscrore="+score;}public Double getScore() {return score;}public void setScore(Double score) {this.score = score;}public String getSid() {return sid;}public void setSid(String sid) {this.sid = sid;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}}jdbc0.Properties配置文件數(shù)據(jù):
user=*** password=**** url=jdbc:mysql://localhost:3306/test driverClass=com.mysql.jdbc.Driver五、測(cè)試與運(yùn)行
沒(méi)什么問(wèn)題
進(jìn)行l(wèi)ist all的時(shí)候,用到反射機(jī)制,這里的話就需要注意對(duì)象中的屬性類型和數(shù)據(jù)庫(kù)的表中的列類型必須對(duì)應(yīng),否則反射時(shí)會(huì)進(jìn)行報(bào)錯(cuò)
六、總結(jié)
加油總結(jié)
- 上一篇: 微信小程序连接阿里云物联网
- 下一篇: 位运算符实现加法和乘法