赞
踩
CREATE TABLE `student` (
`stuid` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`sex` char(2) DEFAULT NULL,
`birthday` datetime DEFAULT NULL,
PRIMARY KEY (`stuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
引入jar,数据库驱动,修改pom.xml文件(在maven项目中加入依赖):
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
执行效率更高,安全性更好,可以防止sql注入
有关SQL注入:https://blog.csdn.net/weixin_46048220/article/details/122298919?spm=1001.2014.3001.5502
public class jdbcTest { public static void main(String[] args) { try { //加载数据库驱动jar包 ///mysql8版本:com.mysql.cj.jdbc.Driver Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } //第一个参数:数据库连接 //第二个参数:用户名 //第三个参数:密码 String url="jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8"; try { //获取数据库链接对象 Connection connection=DriverManager.getConnection(url,"root","root"); System.out.println("连接成功"+ connection); //获取执行sql语句的对象 Statement statement=connection.createStatement(); // 增加 // String sql="insert into student values(null,'张三',19,'男',now())"; // 修改 // String sql="update student set name='李四',age=22 where stuid=1"; // 删除 // String sql="delete from student where stuid=1"; // 增删改都要用这个方法, // statement.executeUpdate(sql); // System.out.println("修改成功"); // 查询 String sqll="select * from student"; // 查询得到的结果集 ResultSet resultSet = statement.executeQuery(sqll); System.out.println(); while (resultSet.next()){ // columnlabel:通过字段名称查询 // columnindex:通过字段位置查询 System.out.print(resultSet.getInt(1)+"\t"); System.out.print(resultSet.getString("name")+"\t"); System.out.print(resultSet.getInt(3)+"\t"); System.out.println(resultSet.getString("sex")+"\t"); System.out.println(resultSet.getInt(5)); } } catch (SQLException throwables) { throwables.printStackTrace(); } } }
import java.sql.*; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; //用户注册功能 public class jdbcSignIn { public static void main(String[] args) { try { Scanner scanner=new Scanner(System.in); System.out.println("姓名"); String name=scanner.next(); System.out.println("年龄"); int age=scanner.nextInt(); System.out.println("性别"); String sex=scanner.next(); System.out.println("生日"); String birthday1=scanner.next(); SimpleDateFormat birthday = new SimpleDateFormat(birthday1); // SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); // Date birthday=sdf.parse(scanner.next()); System.out.println("密码"); String pwd=scanner.next(); String url="jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8"; Class.forName("com.mysql.jdbc.Driver"); Connection connection= DriverManager.getConnection(url,"root","root"); // Statement statement=connection.createStatement(); // String sql="insert into student values(null,'"+name+"',"+age+",'"+sex+"',"+null+",'"+pwd+"')"; // statement.executeUpdate(sql); String sql="insert into student values(null,?,?,?,null,?)"; PreparedStatement preparedStatement=connection.prepareStatement(sql); preparedStatement.setString(1,name); preparedStatement.setInt(2,age); preparedStatement.setString(3,sex); preparedStatement.setString(4,pwd); preparedStatement.execute(); String sqll="select * from student"; ResultSet resultSet=preparedStatement.executeQuery(sqll); // 查询得到的结果集 System.out.println(); while (resultSet.next()){ // columnlabel:通过字段名称查询 // columnindex:通过字段位置查询 System.out.print(resultSet.getInt(1)+"\t"); System.out.print(resultSet.getString("name")+"\t"); System.out.print(resultSet.getInt(3)+"\t"); System.out.println(resultSet.getString("sex")+"\t"); System.out.println(resultSet.getInt(5)); System.out.println(resultSet.getInt(6)); } } catch (Exception e) { e.printStackTrace(); } } } ```![在这里插入图片描述](https://img-blog.csdnimg.cn/55d7600f01a340ce8c14abc04234abaf.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Lmh6YeM5Yir,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center) ```java //写一个登录场景,用户输入用户名密码,验证正确显示登录成功,否则失败。用jdbc数据库完成 String sql_userName="select * from student"; ResultSet resultSet = statement.executeQuery(sql_userName); List list_userName=new ArrayList(); List list_userPwd=new ArrayList(); while (resultSet.next()){ list_userName.add(resultSet.getString("name")); list_userPwd.add(resultSet.getString("pwd")); } System.out.println("输入用户名"); Scanner username=new Scanner(System.in); String userName=username.next(); for(int i=0;i<list_userName.size();i++){ if(userName.equals(list_userName.get(i))){ System.out.println("输入密码"); Scanner userPwd=new Scanner(System.in); String userPwdd=userPwd.next(); if(userPwdd.equals(list_userPwd.get(i))){ System.out.println("登录成功"); break; } if(i==list_userPwd.size()-1){ System.out.println("密码错误"); } }else if (i==list_userName.size()-1){ System.out.println("没有该用户"); }else { System.out.println("yyy"); } } System.out.println(list_userName); System.out.println(list_userPwd); } catch (SQLException throwables) { throwables.printStackTrace(); }
/** * 数据库工具类 */ public class DButils { private static final String DRIVER="com.mysql.jdbc.Driver"; private static final String URL="jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8"; private static final String USERNAME="root"; private static final String PASSWORD="root"; public static Connection getConn(){ try { Class.forName(DRIVER); } catch (ClassNotFoundException e) { e.printStackTrace(); } Connection conn=null; try { conn= DriverManager.getConnection(URL,USERNAME,PASSWORD); } catch (SQLException throwables) { throwables.printStackTrace(); } return conn; } public static void closeAll(Connection conn, Statement st, ResultSet rs){ //先开的后关 if (rs!=null){ try { rs.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if (st!=null){ try { st.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if (conn!=null){ try { conn.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } } }
(数据库中有哪个表,Java中就创建哪个对象) import java.util.Date; public class Student { int stuid; String name; int age; String sex; //导入java.util包中的date(精确到了时分秒) Date birthday; String pwd; //使用toString能够打印输入 @Override public String toString() { return "Student{" + "stuid=" + stuid + ", name='" + name + '\'' + ", age=" + age + ", sex='" + sex + '\'' + ", birthday=" + birthday + ", pwd='" + pwd + '\'' + '}'; } //生成set、get方法 public int getStuid() {return stuid;} public void setStuid(int stuid) {this.stuid = stuid;} public String getName() {return name;} public void setName(String name) {this.name = name;} public int getAge() {return age;} public void setAge(int age) {this.age = age;} public String getSex() {return sex;} public void setSex(String sex) {this.sex = sex;} public Date getBirthday() {return birthday;} public void setBirthday(Date birthday) {this.birthday = birthday;} public String getPwd() {return pwd;} public void setPwd(String pwd) {this.pwd = pwd;} }
import java.util.List;
public interface IStudentDAO {
//因为每个参数都要传进来,所以直接传student对象
public int saveStu(Student s);
public int updateStu(Student s);
public int delStu(int stuid);
public List<Student> queryStu(String sql);
}
import java.sql.*; import java.util.ArrayList; import java.util.List; public class StudentDAO implements IStudentDAO{ private Connection conn; private PreparedStatement ps; private ResultSet rs; @Override public int saveStu(Student s) { //首先获取数据库链接 conn=DButils.getConn(); //准备sql语句 String sql="insert into student values(null,?,?,?,?,?)"; //预处理编译sql语句 try { ps=conn.prepareStatement(sql); ps.setString(1,s.getName()); ps.setInt(2,s.getAge()); ps.setString(3,s.getSex()); ps.setTimestamp(4, new Timestamp(s.getBirthday().getTime())); ps.setString(5, s.getPwd()); return ps.executeUpdate(); } catch (SQLException throwables) { throwables.printStackTrace(); }finally { DButils.closeAll(conn,ps,rs); } return 0; } @Override //修改 public int updateStu(Student s) { //首先判断主键是否存在 if (s.getStuid()!=0){ conn=DButils.getConn(); String sql="update student set name=?,age=?,sex=?,birthday=?,pwd=? where stuid=?"; try { ps=conn.prepareStatement(sql); ps.setString(1,s.getName()); ps.setInt(2,s.getAge()); ps.setString(3,s.getSex()); ps.setTimestamp(4,new Timestamp(s.getBirthday().getTime())); ps.setString(5,s.getPwd()); ps.setInt(6,s.getStuid()); return ps.executeUpdate(); } catch (SQLException throwables) { throwables.printStackTrace(); } } return 0; } @Override public int delStu(int stuid) { conn=DButils.getConn(); String sql="delete from student where stuid=?"; try { ps=conn.prepareStatement(sql); ps.setInt(1,stuid); return ps.executeUpdate(); } catch (SQLException throwables) { throwables.printStackTrace(); }finally { DButils.closeAll(conn,ps,rs); } return 0; } @Override //查询 public List<Student> queryStu(String sql) { conn=DButils.getConn(); try { ps=conn.prepareStatement(sql); rs=ps.executeQuery(); List<Student> list=new ArrayList<Student>(); while (rs.next()){ Student stu=new Student(); stu.setStuid(rs.getInt(1)); stu.setName(rs.getString("name")); stu.setAge(rs.getInt("age")); stu.setSex(rs.getString("sex")); stu.setBirthday(rs.getTimestamp("birthday")); stu.setPwd(rs.getString("pwd")); list.add(stu); } return list; } catch (SQLException throwables) { throwables.printStackTrace(); }finally { DButils.closeAll(conn,ps,rs); } return null; } }
import java.util.Date; import java.util.List; public class Test { public static void main(String[] args) { //通过接口访问 IStudentDAO studentDAO=new StudentDAO(); Student stu=new Student(); // stu.setName("ADD"); // stu.setSex("男"); // stu.setAge(20); // stu.setBirthday(new Date()); // stu.setPwd("12321"); // studentDAO.saveStu(stu); // stu.setStuid(12); // stu.setName("UPDATE"); // stu.setSex("女"); // stu.setAge(20); // stu.setBirthday(new Date()); // stu.setPwd("admin"); // studentDAO.updateStu(stu); // studentDAO.delStu(10); List<Student> list=studentDAO.queryStu("select * from student"); for (Student student : list) { System.out.println(student); } } }
没有重写tostring方法的遍历打印结果:
重写tostring方法的遍历打印结果:
1、ResultSet:executeQuery(String sql); 执行SQL查询,并返回ResultSet 对象。
2、int:executeUpdate(String sql); 可执行增,删,改,返回执行受到影响的行数。
3、boolean:execute(String sql); 可执行任何SQL语句,返回一个布尔值,表示是否返回ResultSet 。
execute是executeQuery和executeUpdate的综合.
使用哪一个方法由SQL语句所产生的内容决定
executeUpdate() 这是 PreparedStatement 接口中的方法
executeUpdate(String sql) 这是 PreparedStatement 从父接口 Statement 中继承过来的方法
executeUpdate() 中执行 SQL 语句需要在创建 PerparedStatement 时通过 Connection 的 prepareStatement(String sql) 方法中写出,因为 PerparedStatement 中的 SQL 语句数据库需要进行预编译和缓存,因此要在创建 PerparedStatement 对象时给出 SQL 语句。
而 executeUpdate(String sql) 是 Statement 中的方法,参数中的 SQL 语句只是提交给数据库去执行,并不需要预编译。
如果 SQL 语句中有 ? 占位符,那么在设置好占位符中的值后,必须使用 executeUpdate() 执行。而 executeUpdate(String sql) 只是提交一个 SQL 语句,且这个语句中不能带有 ? 占位符。
1>方法executeQuery
用于产生单个结果集(ResultSet)的语句,例如:被执行最多的SELECT 语句。
这个方法被用来执行 SELECT 语句,但也只能执行查询语句,执行后返回代表查询结果的ResultSet对象。例如:
Class.forName("com.mysql.jdbc.Driver"); //加载数据库驱动 Connection conn = null; conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root","1234"); //使用DriverManager获取数据库连接 Statement stmt = conn.createStatement(); //使用Connection来创建一个Statment对象 ResultSet rs =stmt.executeQuery("select * from teacher"); //执行查询语句并且保存结果 while (rs.next()){ System.out.println(rs.getInt(1) + "/t" + rs.getString(2)); } //把查询结果输出来
2>方法executeUpdate
用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。
executeUpdate 的返回值是一个整数(int),指示受影响的行数(即更新计数)。
对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。例如:
Class.forName("com.mysql.jdbc.Driver");
//加载数据库驱动
Connection conn = null;
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test",
"root","1234");
//使用DriverManager获取数据库连接
Statement stmt = conn.createStatement();
//使用Connection来创建一个Statment对象
return stmt.executeUpdate(sql);
//执行DML语句,返回受影响的记录条数
3>方法execute:
可用于执行任何SQL语句,返回boolean值,表明执行该SQL语句是否返回了ResultSet。
如果执行后第一个结果是ResultSet,则返回true,否则返回false。
但它执行SQL语句时比较麻烦,通常我们没有必要使用execute方法来执行SQL语句,而是使用executeQuery或executeUpdate更适合。
但如果在不清楚SQL语句的类型时则只能使用execute方法来执行该SQL语句了。例如:
Class.forName(driver); //加载驱动 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root","1234"); //获取数据库连接 stmt = conn.createStatement(); //使用Connection来创建一个Statment对象 boolean hasResultSet = stmt.execute(sql); //执行SQL,返回boolean值表示是否包含ResultSet if (hasResultSet) { //如果执行后有ResultSet结果集 rs = stmt.getResultSet(); //获取结果集 ResultSetMetaData rsmd = rs.getMetaData(); //ResultSetMetaData是用于分析结果集的元数据接口 int columnCount = rsmd.getColumnCount(); while (rs.next()){//输出ResultSet对象 for (int i = 0 ; i < columnCount ; i++ ) { System.out.print(rs.getString(i + 1) + "/t"); } System.out.print("/n"); } } else { System.out.println("该SQL语句影响的记录有" + stmt.getUpdateCount() + "条"); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。