java操作数据库(JDBC)

JDBC:

executeUpdate()

 

int excuteUpdate(String sql) 执行数据库中的SQL语句, insert delete update

返回值int,表示操作成功数据表多少行

 

 

package jdbc;

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.sql.Statement;

 

 

/*

 * JDBC操作数据库的步骤

 *   1.注册驱动   告诉JVM使用的是哪一个的数据库的驱动

 *   2.获得连接    使用JDBC中的类,完成对my sql 数据库的连接

 *   3.获得语句执行平台    通过连接对象获取SQL语句的执行者对象

 *   4.执行SQL语句   使用执行者对象向数据库执行SQL语句,获取到数据库执行的结果

 *   5.处理结果   

 *   6.释放资源

 */

public class JDBCdemo {

       public static void main(String[] args) throws  ClassNotFoundException, SQLException {

              //1.注册驱动        反射技术将驱动类加人到内容

              //使用java.sql.DriverManager类的静态方法registerDriver(Driver driver)

              //Driver是一个接口,参数传递,MySql驱动程序中的实现类

              //DriverManager.registerDriver(new Driver());源码中已存在,不推荐重复写

              Class.forName("com.mysql.jdbc.Driver");

             

              //2.获得数据库连接    DriverManager类中的静态方法

              //static Connection getConnection(String url,String user,String password)

              //返回值是Connection接口的实现类,在mysql驱动程序

              //url:数据库地址  jdbc:mysql://连接主机IP:端口号/数据库名字

              //url:数据库地址  jdbc:mysql://localhost:33060/mybase

              String url = "jdbc:mysql://localhost:33060/mybase";

              String userName = "root";

              String password = "root";

              Connection con = DriverManager.getConnection(url,userName,password);

             

              //3.获得语句执行平台,通过数据库连接对象,获取到SQL语句的执行者对象

              //con对象调用方法 Statement createStatement() 获取Statement对象,将SQL语句发送到数据库

              //返回值是Statement接口中的实现类对象,在mysql驱动程序

              Statement stat = con.createStatement();

             

              //4.执行SQL语句,

              //通过执行者对象调用方法执行SQL语句,获取结果

              //int excuteUpdate(String sql) 执行数据库中的SQL语句, insert delete update

              //返回值int,表示操作成功数据表多少行

              int row = stat.executeUpdate("insert into mybase(midnum,mname,sex) values(3,'张三','男')");

             

              //5.处理结果,显示成功的语句数

              System.out.println(row);

             

              //6.释放资源

              stat.close();

              con.close();

       }

      

}

*****************************************************************

executeQuery()

ResultSet executeQuery(String sql) 执行SQL语句中的select查询

executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供我们使用

 

 

package jdbc;

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

 

/*

 * JDBC技术,查询数据表,获取结果集

 */

public class JDBCDemo1 {

       public static void main(String[] args) throws ClassNotFoundException, SQLException {

              //1.注册驱动

              Class.forName("com.mysql.jdbc.Driver");

             

              //2.获取连接对象

              String url = "jdbc:mysql://localhost:33060/mybase";

              String user = "root";

              String password = "root";

              Connection con = DriverManager.getConnection(url, user, password);

             

              //3.获取执行SQL语句对象

              Statement stat = con.createStatement();

             

              //4.调用执行者对象方法,执行SQL语句获得结果集

              //ResultSet executeQuery(String sql) 执行SQL语句中的select查询

//executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供我//们使用

              //返回ResultSet接口的实现类对象,实现类在mysql驱动中

              String sql = "select * from mybase";

              ResultSet re =  stat.executeQuery(sql);

             

              //5.处理结果集

              //ResultSet接口方法 boolean next() 返回true有结果集,返回false则没有

              while(re.next()) {

                     System.out.println(re.getInt("midnum")+"  "+

                                          re.getString("mname")+"  "+re.getString("sex"));

              }

             

              //6.关闭资源

              re.close();

              stat.close();

              con.close();

       }

}

******************************************************************************

注入攻击

package jdbc;

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Scanner;

 

/*

 * java程序实现用户名登录,用户名和密码,数据库检查

 * 演示被别人注入攻击

 */

public class JDBCDemo2 {

       public static void main(String[] args) throws ClassNotFoundException, SQLException {

              Class.forName("com.mysql.jdbc.Driver");

              //连接数据库

              String url = "jdbc:mysql://localhost:33060/mybase";

              String username = "root";

              String password = "root";

              Connection con = DriverManager.getConnection(url, username, password);

             

              Statement stat = con.createStatement();

             

              Scanner sc = new Scanner(System.in);

              String user  = sc.nextLine();

              String pass = sc.nextLine();

             

              /*

               * SELECT * FROM users WHERE username='张三' AND PASSWORD='123' OR 1=1;

               * 注入攻击,此时永远返回true

               * 输入的pass为       任意值 'or '1=1               时永远为真

               */

              String sql = "SELECT * FROM users WHERE username='"+user

                            +"' AND PASSWORD='"+pass+"'";

             

              ResultSet re = stat.executeQuery(sql);

              while(re.next()) {

                     System.out.println(re.getString("username") + re.getString("password"));

              }

             

              re.close();

              stat.close();

              con.close();

       }

}

*************************************************

 

 

 

prepareStatement

,PreparedStatement(SQL预编译存储,多次高效的执行SQL)

PreparedStatement pst = con.prepareStatement(sql);

 

 

package jdbc;

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.Scanner;

 

/*

 * java程序实现用户名登录,用户名和密码,数据库检查

 * 防止注入攻击

 * Statement接口有一个子接口,PreparedStatement(SQL预编译存储,多次高效的执行SQL)

 */

public class JDBCDemo3 {

       public static void main(String[] args) throws ClassNotFoundException, SQLException {

              Class.forName("com.mysql.jdbc.Driver");

              //连接数据库

              String url = "jdbc:mysql://localhost:33060/mybase";

              String username = "root";

              String password = "root";

              Connection con = DriverManager.getConnection(url, username, password);

             

              Scanner sc = new Scanner(System.in);

              String user  = sc.nextLine();

              String pass = sc.nextLine();

              sc.close();

              //调用SQL语句,数据表,查询用户名和密码,存在则登陆成功,否则登陆失败

              String sql = "SELECT * FROM users WHERE username=? AND PASSWORD=?";

              //调用Connection中的方法preparedStatement,获取preparedStatement接口中的实现类

              //方法中SQL语句的参数全部使用?占位符

              PreparedStatement pst = con.prepareStatement(sql);

              pst.setObject(1, user);

              pst.setObject(2, pass);

              ResultSet rs = pst.executeQuery();

              while(rs.next()) {

                     System.out.println(rs.getString("username") + rs.getString("password"));

              }

             

              rs.close();

              pst.close();

              con.close();

       }

}

数据批处理

package jdbcPool.batch;

 

import java.sql.Connection;

import java.sql.PreparedStatement;

 

import jdbcPool.JDBCUtils;

 

/**

 * 数据库批处理

 */

public class BatchUpdate  {

       public static void main (String[] args) throws Exception{

              Connection con = JDBCUtils.getConnection();

              String sql = "insert into test (name,age) values(?,?)";

              PreparedStatement ps = con.prepareStatement(sql);

             

              long begin = System.currentTimeMillis();

              for (int i = 0; i < 1000; i++) {

                     ps.setString(1, "zhangsan");

                     ps.setInt(2, 22);

                     ps.addBatch();

              }

              ps.executeBatch();

              long end = System.currentTimeMillis();

              System.out.println(end-begin);

              System.out.println("success");

       }

}

数据库批处理要求

在连接url后加上: ?rewriteBatchedStatements=true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值