java-jdbc
来源:互联网 发布:将软件添加到磁贴 编辑:程序博客网 时间:2024/06/02 01:52
链接数据库步骤:
package com.west.demo;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;/* * JDBC操作数据库的步骤 * 1.注册驱动 * 告知JVM使用的是哪一个数据库的驱动 * 2.获得链接 * 使用JDBC中的类,完成对MYSQL数据库的链接 * 3.获得语句执行平台 * 通过链接对象获取对SQL语句的执行者对象 * 4.执行SQL语句 * 通过执行者对象,向数据库执行SQL语句 * 获取到数据库的执行后的结果 * 5.处理结果 */public class JDBCDemo { public static void main(String[] args) throws ClassNotFoundException,SQLException { //1.注册驱动,反射技术,将驱动类加入到内存 Class.forName("com.mysql.jdbc.Driver"); //2.获得数据库的链接,DriverManager类中静态方法 /* static Connection getConnection(String url,String user,String password) * 返回值是connection接口的实现类,在mysql驱动程序 * url:数据库地址, jdbc:mysql://localhost:3306/mybase; */ String url = "jdbc:mysql://localhost:3306/mybase"; String username = "root"; String password = "qgm610824"; Connection con = DriverManager.getConnection(url,username,password); //3.获得语句执行平台,通过数据库连接对象,获取到SQL语句的执行者对象 //con对象调用方法 statement createment() 获取statement对象, //将SQL语句发送到数据库 //返回值是statement接口的实现类对象,在mysql驱动程序 Statement stat = con.createStatement(); /*4.执行SQL语句 * 通过执行者对象调用方法执行SQL语句,获取结果 * int executeUpdate(String sql) 执行SQL语句 用于insert delete update * 不能用于select * 返回int ,操作成功,返回的是表的行数 * */ int row= stat.executeUpdate("INSERT INTO sort(sname,sprice,sdesc) VALUES('汽车用品',50000,'疯狂涨价')"); System.out.println(row); //6.释放资源 一堆close stat.close(); con.close(); }}
package com.west.demo;import java.sql.*;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:3306/mybase"; String username= "root"; String password = "qgm610824"; Connection con = DriverManager.getConnection(url,username,password); //3.获取执行SQL语句对象 Statement stat = con.createStatement(); //4.调用执行者对象方法,执行SQL语句,获取结果集 //ResultSet executeQuery(String sql)执行SQL语句中的 //select查询 String sql = "SELECT * FROM sort"; ResultSet rs = stat.executeQuery(sql); //5.处理结果集 //ResultSet接口方法boolean next() 返回true有结果集,false没有结果集 while(rs.next()) { //获取每列数据,使用是ResultSet接口的方法 getXX方法参数中,建议写String列名 System.out.println(rs.getInt("sid")+" "+rs.getString("sname")+ " "+rs.getDouble("sprice")+" "+rs.getString("sdesc")); } rs.close(); stat.close(); con.close(); }}
注入攻击:
package com.west.demo;import java.sql.*;import java.util.Scanner;/* * java程序实现用户登录,用户名和密码,数据库检查 * 演示注入攻击 */public class JDBCDemo3 { public static void main(String[] args) throws ClassNotFoundException,SQLException{ //1.注入驱动 Class.forName("com.mysql.jdbc.Driver"); //2.获得连接对象 String url = "jdbc:mysql://localhost:3306/mybase"; String username = "root"; String password ="qgm610824"; Connection con = DriverManager.getConnection(url,username,password); //3.获取执行SQL语句对象 Statement stat = con.createStatement(); Scanner sc =new Scanner(System.in); String user=sc.nextLine(); String pass=sc.nextLine(); //执行SQL语句,查询用户名和密码,如果存在,登录成功,不存在登录失败 String sql="select * from users where username='"+user+"' and password='"+pass+"'"; System.out.println(sql); ResultSet rs =stat.executeQuery(sql); while(rs.next()) { System.out.println(rs.getString("username")+" "+rs.getString("password")); } rs.close(); stat.close(); con.close(); }} result:qew af 'or'1=1 select * from users where username='qew' and password='af 'or'1=1'q 12
防止注入攻击:
package com.west.demo;import java.sql.*;import java.util.Scanner;/* * Java程序实现用户登录,用户名和密码,数据库检查 * 防止注入攻击 * Statement有一个子接口PreparedStatement(SQL预编译存储,多次高效的执行SQL) * */public class JDBCDemo4 {public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver"); String url="jdbc:mysql://localhost:3306/mybase"; String username="root"; String password="qgm610824"; Connection con = DriverManager.getConnection(url,username,password); Scanner sc=new Scanner(System.in); String usesr = sc.nextLine(); String pass = sc.nextLine(); String sql ="select * from users where username=? and password=?"; //调用Connection接口的方法prepareStatement,获取PrepareStatement接口的实现类 //方法中参数,SQL语句中的参数全部采用问号占位符 PreparedStatement ps =con.prepareStatement(sql); System.out.println(ps); //调用pst对象set方法,设置问号占位符上的参数 ps.setObject(1, usesr); ps.setObject(2, pass); //调用方法,执行Sql,获取结果集 ResultSet rs = ps.executeQuery(); while(rs.next()) { System.out.println(rs.getString("username")+" "+rs.getString("password")); } rs.close(); ps.close(); con.close(); }catch(Exception e) { e.printStackTrace(); }}}
使用PreparedStatement接口,实现数据表的更新操作:
package com.west.demo.util;import java.sql.*;/* * 使用PreparedStatement接口,实现数据表的更新操作 * */public class JDBCDemoUtil {public static void main(String[] args) throws ClassNotFoundException, SQLException { Class.forName("com.mysql.jdbc.Driver"); String url="jdbc:mysql://localhost:3306/mybase"; String username="root"; String password="qgm610824"; Connection con=DriverManager.getConnection(url,username,password); String sql="UPDATE sort SET sname=?, sprice=? WHERE sid=?"; PreparedStatement ps=con.prepareStatement(sql); ps.setObject(1, "汽车用品"); ps.setObject(2, 23456); ps.setObject(3, 7); ps.executeUpdate(); ps.close(); con.close();}}
####使用PreparedStatement接口,实现数据表的查询操作:
package com.west.demo.util;import java.sql.*;/* * 使用PreparedStatement接口,实现数据表的查询操作 * */public class JDBCDemoUtil21 {public static void main(String[] args) throws ClassNotFoundException, SQLException { Class.forName("com.mysql.jdbc.Driver"); String url="jdbc:mysql://localhost:3306/mybase"; String username="root"; String password="qgm610824"; Connection con=DriverManager.getConnection(url,username,password); String sql="SELECT * FROM sort"; PreparedStatement ps=con.prepareStatement(sql); ResultSet rs=ps.executeQuery(); while(rs.next()) { System.out.println(rs.getString("sid")+" "+rs.getString("sname")+" " +rs.getString("sprice")+" "+rs.getString("sdesc")); } rs.close(); ps.close(); con.close();}}
JDBC工具类
package com.west.jdbcutil;/* * 实现JDBC工具类 * 定义方法,直接返回数据库的连接对象 * * 写关闭方法 */import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class JDBCUtils { private JDBCUtils() {} private static Connection con; static { try { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/mybase"; String username="root"; String password="qgm610824"; con=DriverManager.getConnection(url,username,password); } catch (Exception e) { throw new RuntimeException(e+"数据库连接失败"); } } /* * 定义静态方法,返回数据库的连接对象 */ public static Connection getConnection() { return con; } public static void close(Connection con,Statement stat,ResultSet rs) { if(rs!=null) { try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(stat!=null) { try { stat.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(con!=null) { try { con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void close(Connection con,Statement stat){ if(stat!=null){ try{ stat.close(); }catch(SQLException ex){} } if(con!=null){ try{ con.close(); }catch(SQLException ex){} } }}
Properties配置文件工具类
以后想要连接其他数据库或表,只需要修改配置文件,不用修改源代码
配置文件:
文件要在src文件夹新建,后缀名为.properties内容为:driverClass=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybase username=root password=xxxx
package com.west.jdbcutil;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.util.Properties;/* * 编写数据库连接的工具类,JDBC工具类 * 编写连接对象采用读取配置文件方式 * 读取文件获取连接,执行一次,static{} */public class JDBCUtilsConfig { private static Connection con; private static String driverClass; private static String url; private static String username; private static String password; static { try { readConfig(); Class.forName(driverClass); con=DriverManager.getConnection(url, username, password); }catch(Exception e) { throw new RuntimeException("数据库连接失败"); } } private static void readConfig() throws IOException { InputStream in =JDBCUtilsConfig.class.getClassLoader().getResourceAsStream("base.properties"); Properties pro=new Properties(); pro.load(in); driverClass=pro.getProperty("driverClass"); url = pro.getProperty("url"); username = pro.getProperty("username"); password = pro.getProperty("password"); } public static Connection getConnection() { return con; }}
package com.west.propertiesdemo;import java.sql.Connection;import com.west.jdbcutil.JDBCUtilsConfig;public class TestUtils { public static void main(String[] args) { //直接调用JDBCUtilsConfig.getConnection Connection con =JDBCUtilsConfig.getConnection(); System.out.println(con); }}
阅读全文
0 0
- JAVA JDBC
- java--jdbc
- Java JDBC
- java jdbc
- JAVA JDBC
- Java JDBC
- java JDBC
- Java Jdbc
- Java JDBC
- java jdbc
- java JDBC
- JAVA JDBC
- JAVA JDBC
- JAVA JDBC
- JAVA JDBC
- Java--JDBC
- JAVA JDBC
- java jdbc
- Python变量与动态数据类型
- Servlet笔记
- 正则表达式
- Hbase总结,Hbase安装部署,Hbase shell命令
- 禁用鼠标键盘和桌面不显示鼠标指针
- java-jdbc
- Java消息队列--ActiveMq 实战
- android 打电话
- 漫游jedis-RESP通信实现
- 2.A+B——the first step
- js—QQ菜单简单实例
- [POI2005]SKA-Piggy Banks
- [化工流程模拟].TLF-SOFT-CHEMSTATIONS.CHEMCAD.V6.0.1-MAGNiTUDE.iso
- Session和Cookie学习笔记—Cookie使用