JDBC
第一个jdbc程序
import java.sql.*; public class firstJdbc { public static void main(String[] args) throws ClassNotFoundException, SQLException { //1.加载驱动 Class.forName("com.mysql.jdbc.Driver"); //2.用户信息和url String url="jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true"; String username="root"; String password="13476110270dwx"; //3.连接,Connection代表数据库 Connection connection=DriverManager.getConnection(url,username,password); //4.执行sql对象 Statement statement =connection.createStatement(); //5.执行sql String sql="select * from users"; //executeQuery()查询操作,返回ResultSet //execute()执行任何sql //executeUpdate()执行更新,删除,插入,返回受影响的行数 //executeBatch()可以放多个sql执行 ResultSet resultSet=statement.executeQuery(sql); while(resultSet.next()){ //getObject()不知道数据类型时使用 //getString()获得字符串 //getInt()获得整数... System.out.println("id="+resultSet.getObject("id")); System.out.println("name="+resultSet.getObject("NAME")); System.out.println("password="+resultSet.getObject("PASSWORD")); System.out.println("email="+resultSet.getObject("email")); System.out.println("birth="+resultSet.getObject("birthday")); } //6.释放连接 resultSet.close(); statement.close(); connection.close(); } }
Statement对象不安全,会存在sql注入问题
PreparedStatement安全的,其防止sql注入的本质是吧传递的参数当做字符包裹
//使用?占位符代替参数 String sql="insert into users(id,name,password) values(?,?,?)"; //预编译sql,不执行 PreparedStatement st=connection.prepareStatement(sql); //给参数赋值,第一个为位置,第二个为值 st.setInt(1,4); st.setString(2,"dengwenxiong"); st.setString(3,"123456"); //执行 int i=st.executeUpdate();
事务
//开启事务 connection.setAutoCommit(false); //提交事务 connection.commit();
//回滚
connection.rollback();
数据库连接池
池化技术:准备一些预先的资源,过来就连接预先准备好的
待更新