jdbc连接MySQL数据库的简单应用

jdbc连接MySQL数据库和连接Oracle数据库大体步骤一样,首先加载数据库驱动包,然后创建数据库连接,接着执行sql语句,最后返回结果集。但连接MySQL我们需要导入的驱动包是mysql-connector.jar。

接下来通过一个demo完成从控制台输入数据库的用户名和密码进行连接MySQL,并创建student表,实现插入和查询功能!

  1. 创建demo类,并导入mysql-connector.jar。通过Class.forName("com.mysql.jdbc.Driver");
          或者 com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver();
          或者new com.mysql.jdbc.Driver();   进行加载驱动。
  2. 通过DriverManager.getConnection("jdbc:mysql://localhost:3306/student",Uname,psw);创建连接
  3. 创建statement对象,并通过executeUpdate(sql),executeQuery(sql)等方法进行数据创建和查询
  4. 通过循环遍历结果集,最后关闭连接
具体代码如下:
public static void main(String[] args) throws Exception{
			Connection conn=null;
			try {
				String sql="";
				//从控制台输入数据库的用户名和密码
				Scanner in=new Scanner(System.in);
				System.out.println("请输入用户名:");
				String Uname=in.next();
				System.out.println("请输入密码:");
				String psw=in.next();
				//加载MySQL驱动
				Class.forName("com.mysql.jdbc.Driver");
				//创建数据库连接
				conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/student",Uname,psw);
				//创建Statement对象
				Statement st=conn.createStatement();
				//创建student表
				sql = "create table student(id char(20),name varchar(20),primary key(id))";
				//执行创建语句并返回结果
				int result=st.executeUpdate(sql);
				//result!=-1表示执行成功
				if(result!=-1){
					System.out.println("数据表创建成功");
					//插入数据
					sql = "insert into student(id,name) values('001','james')";
					result = st.executeUpdate(sql);
					//查询数据
					sql="select * from student";
					//查询结果交给resultset对象
					ResultSet rs=st.executeQuery(sql);
					//遍历查询结果集
					while(rs.next()){
						int id=rs.getInt("id");
						String name=rs.getString("name");
						System.out.println(id+" ");
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
				//关闭连接
				conn.close();
			}
		}


注意:本文中用的statement对象进行SQL语句执行,但是在真实项目中我们已经用preparedstatement代替了该对象,原因如下:

1、 PreparedStatement接口继承Statement PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象。

2、作为 Statement 的子类,PreparedStatement 继承了 Statement 的所有功能。三种方法
      execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要参数

3.最重要的一点是极大地提高了安全性.

即使到目前为止,仍有一些人连基本的恶义SQL语法都不知道.
String sql = "select * from tb_name where name= '"+varname+"' and passwd='"+varpasswd+"'";
如果我们把[' or '1' = '1]作为varpasswd传入进来.用户名随意,看看会成为什么?

select * from tb_name = '随意' and passwd = '' or '1' = '1';
因为'1'='1'肯定成立,所以可以任何通过验证.更有甚者:
把[';drop table tb_name;]作为varpasswd传入进来,则:
select * from tb_name = '随意' and passwd = '';drop table tb_name;有些数据库是不会让你成功的,但也有很多数据库就可以使这些语句得到执行.

而如果你使用预编译语句.你传入的任何内容就不会和原来的语句发生任何匹配的关系.只要全使用预编译语句,你就用不着对传入的数据做任何过虑.而如果使用普通的statement,有可能要对drop,;等做费尽心机的判断和过虑.

最后关于项目开发中使用preparedstatement对象可以参阅本人《jdbc实现Oracle数据库连接的简单案例》这篇文章!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值