jdbc连接MySQL数据库和连接Oracle数据库大体步骤一样,首先加载数据库驱动包,然后创建数据库连接,接着执行sql语句,最后返回结果集。但连接MySQL我们需要导入的驱动包是mysql-connector.jar。
接下来通过一个demo完成从控制台输入数据库的用户名和密码进行连接MySQL,并创建student表,实现插入和查询功能!
- 创建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(); 进行加载驱动。 - 通过DriverManager.getConnection("jdbc:mysql://localhost:3306/student",Uname,psw);创建连接
- 创建statement对象,并通过executeUpdate(sql),executeQuery(sql)等方法进行数据创建和查询
- 通过循环遍历结果集,最后关闭连接
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、
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,;等做费尽心机的判断和过虑.
即使到目前为止,仍有一些人连基本的恶义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数据库连接的简单案例》这篇文章!