跟着慕课网上学着打了一段java的JDBC的代码,然后一运行就gg,然后查原因查了几个小时终于得出了解决方案
首先检查一下是不是缺少mysql connecter,这个百度一下,来到mysql官网,选择JDBC Driver for MySQL (Connector/J),随便选一个,下好解压,提取出里面jar文件放进一个放进tomcat的lib目录下(记住位置),我解压出来的叫mysql-connector-java-5.1.45-bin
然后来到你写好java代码的页面,左上角点开有个project structure,点开,选择modules,选择dependencies下module source,点击最右边的小绿色加号,选择你刚刚解压出来的jar文件,这样jar包就导入到project里面了,代码应该能运行无误了,当然要验证是否连接上了数据库你先用dos或者navicat在数据库里写张数据表
附上我运行成功的代码:
import java.sql.*;
import java.util.*;
public class mys {
private static final String url="jdbc:mysql://localhost:3306/test";//test为我的数据库的名字
private static final String user="root";//用户名
private static final String password="root";//密码
public static void main(String []args) throws Exception//记住要写抛出异常,否则就要用try catch语句
{
Class.forName("com.mysql.jdbc.Driver");//加载驱动
Connection con=DriverManager.getConnection(url,user,password);//连接数据库
Statement stm=con.createStatement();
ResultSet re=stm.executeQuery("select * from inf");//执行询问语句,re中保存结果的集合
while(re.next())//遍历结果
{
System.out.println(re.getString("name")+","+re.getInt("age")+","+re.getInt("tel"));//当然你的数据表要有这几个属性
}
}
}
Class.forName("com.mysql.jdbc.Driver");这句话的意思是加载mysql的驱动程序,不同的数据库这句话不同
Connection con=DriverManager.getConnection(url,user,password)这句话是获得连接数据库后返回的对象
url里面放的是jdbc:mysql://localhost:3306/+你要操作的数据库名字,user和password显而易见是你登录数据库的账号密码
createStatement():返回向数据库发送sql的statement对象,该对象用于接收对数据库加入增删查改的操作语句。
prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象,该对象只是预编译生成,用通配符?代替不确定的字段,后面再用一系列的set函数将?替换掉,在调用execute函数之前是不会生成Satement对象的
重点介绍statement接口(常用):
Statement:由createStatement创建,用于发送简单的SQL语句(不带参数)。
PreparedStatement :继承自Statement接口,由preparedStatement创建,用于发送含有一个或多个参数的SQL语句。PreparedStatement对象比Statement对象的效率更高
并且可以防止SQL注入,所以我们一般都使用PreparedStatement。
常用statement方法:
execute(String sql):运行语句,返回是否有结果集
executeQuery(String sql):运行select语句,返回ResultSet结果集。
executeUpdate(String sql):运行insert/update/delete操作,返回更新的行数。
addBatch(String sql) :把多条sql语句放到一个批处理中。
executeBatch():向数据库发送一批sql语句执行。
然后是接收上面方法返回的ResultSet接口:
getString(int index)、getString(String columnName):获得在数据库里是varchar、char等类型的数据对象。
getFloat(int index)、getFloat(String columnName):获得在数据库里是Float类型的数据对象。
getDate(int index)、getDate(String columnName):获得在数据库里是Date类型的数据。
getBoolean(int index)、getBoolean(String columnName):获得在数据库里是Boolean类型的数据。
getObject(int index)、getObject(String columnName):获取在数据库里任意类型的数据。
ResultSet还提供了对结果集进行滚动的方法:
next():移动到下一行
Previous():移动到前一行
absolute(int row):移动到指定行
beforeFirst():移动resultSet的最前面。
afterLast() :移动到resultSet的最后面。
然后介绍一些sql语句的知识:
迷糊查询:%可以代替0个或多个字符
比如:select * from students where name like '王%' 这个句子可以把表students里面name符合的王或者王xx(任意数目)的记录返回,如果是%王%就是查询包含王的所有记录
随机查询:用Math.random()函数返回一个0-1之间的小数,那么直接对该数*listsize再用int取整可以获得集合范围的一个数字,配合absolute函数可以查询随机数字的记录
预处理语句:上面已经叙述,举个例子
sql=con.prepareStatement("select * from tb1 where id ");后面调用setInt(1,5);这样就相当于把第1个问号值修改为了5,然后再调用executeUpdate或者executeQuery之类的函数将该命令完成并执行,多个问号也是一样的,第一个参数index是第index个问号的意思,然后根据对应问号应该填的值选择set函数,第二个参数为?修改成的值