例子:
package jdbc.my;
import java.sql.DriverManager;
import java.sql.ResultSet;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
//1,Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。Statement对象,
//用于执行不带参数的简单SQL语句。
//Statement的缺点:容易产生saql注入(即恶意注入); 比如一个varchar类型的字段输入chen'10,因为'是特殊符号会报错,注入成功
public class JdbcTest {
public static void main(String[] args) throws Exception {
String user="root";
String password="onno799967";
String url="jdbc:mysql://localhost:3306/java1";//jdbc协议指向链接到哪个数据库,://的写法类似http协议http://
//jdbc:协议
//mysql://localhost:3306/mysql6 该协议链接到的数据库
//加载jdbc驱动,通过反射的方式,把驱动创建实例,加载到系统中
Class.forName("com.mysql.jdbc.Driver");//com.mysql.jdbc.Driver为导入的jar包中的类,最后是类名,前面是包名
//创建操作数据库接口的对象
Connection conn=(Connection) DriverManager.getConnection(url, user, password);//建立数据库的连接,赋值给conn
/* DriverManager.getConnection(url, user, password);返回的是一个java包中的Connecttion类型的接口
Connection conn指的是导入的包中的Connection类它是后面那个java类的实现类
用接口给它的实现类赋值,相当于向下转型,向下转型的前提是多态,所以程序在底层应该有多态的语法,所以对于这样写是成立的。*/
System.out.println("数据库连接成功");
Statement stmt=(Statement) conn.createStatement();
//操作数据库:创建表,插入语句,修改内容,删除内容用的都是Statement对象的executeUptate方法,因为它们都会改变数据库的形态
//注:update:更新,execute:执行 query:查询
//查询用的是Statement对象的executeQuery方法,返回ResultSet对象,这是一个集合,要遍历才能取值
//建表语句1
String createTableSql ="create table stu(id int primary key auto_increment,"+
"sname varchar(50) not null, sage int);";
int i=stmt.executeUpdate(createTableSql);//通过statement执行sql语句,返回值表示影响的行数
//影响行:类似执行sql语句时成功添加几行
System.out.println("影响行数"+i);
//插入语句
String inserSql="insert into stu(sname,sage) values('zhangsan',20),('lisi',18);";
int j=stmt.executeUpdate(inserSql);//执行sql语句,j表示成功执行的行数
System.out.println("添加行数"+j);
//修改
String updataSql="update stu set sage=21 where sname='zhangsan';";
int k=stmt.executeUpdate(updataSql);//修改张三的年龄为21
System.out.println("修改的数量"+k);
//删除
String deleteSql="delete from stu where sname='zhangsan';";
int n=stmt.executeUpdate(deleteSql);
System.out.println("删除的数量"+n);
//查询
String querySql="select id,sname,sage from stu;";
ResultSet rs=stmt.executeQuery(querySql);//执行查询所有学生信息,返回一个结果:ResultSet;
System.out.println("查询成功");
//遍历rs
while(rs.next()) //结果为布尔型为true表示还有下一条数据,继续遍历,false表示没有下一条,遍历结束,注意:getxxx()方法会移动指针
{
// //获得字段值的方法1通过字段索引获得字段的值,注意:这里索引是从1开始的
// int id=rs.getInt(i); //columnIndex字段索引号
// //获得id,id在sql中是第一个查询的字段
// String sname=rs.getNString(2);//获得sname值
// int sage =rs.getInt(3);//获得sage值*/
// System.out.println(id+","+sname+","+sage);
//获得字段值的方法2:通过字段名称获得
int _id=rs.getInt("id");//获得id
String _sname=rs.getString("sname");
int _sage=rs.getInt("sage");
System.out.println(_id+","+_sname+","+_sage);
}
if(stmt!=null) //Statement对象需要关闭
stmt.close();//当库不存在,时connection为空,stmt为空,这时候关,会报空指针异常
if(conn!=null) //建立的链接需要关闭
conn.close();
}
}
自己写的一个简单的程序:
package jdbc.my;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
//使用Statement类
import com.mysql.jdbc.*;
public class JdbcbyMine1 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
String url="jdbc:mysql://localhost:3306/java2";
String user="root";
String password="onno799967";
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection(url, user, password);
Statement stmt=(Statement) conn.createStatement();
//创建表
String s1="create table stu1(id int primary key auto_increment,sname varchar(20) not null,age int);";
int i=stmt.executeUpdate(s1);
System.out.println("影响行数:"+i);
//添加数据
s1="insert into stu1(sname,age) values('a',23),('b',40),('c',18);";
i=stmt.executeUpdate(s1);
System.out.println("添加行数:"+i);
//修改数据
s1="update stu1 set age=0 where sname='a';";
i=stmt.executeUpdate(s1);
System.out.println("修改行数:"+i);
//删除数据
s1="delete from stu1 where age=40;";
i=stmt.executeUpdate(s1);
System.out.println("删除行数"+i);
//查询数据
s1="select * from stu1;";
ResultSet rs=stmt.executeQuery(s1);
while(rs.next())
{
int id=rs.getInt(1);
String sname=rs.getString(2);
int age=rs.getInt(3);
System.out.println(id+" "+sname+" "+age);
}
if(stmt==null)
stmt.close();
if(conn==null)
conn.close();
}
}
输出: