首先奉上代码 和报错信息
<pre>
public class OracleHelper {
//定义三个变量
private static Connection ct=null;
private static PreparedStatement ps=null;
private static ResultSet rs=null;
//连接数据库的用户名 密码 URL 驱动
//说明: 在实际开发中,我们往往把这些变量写到一个外部文件中去,
//当文件启动的时候, 我们读入这些配置信息 java.util.Properties
private static String username;//="scott";
private static String password;//="tiger";
private static String driver;//="oracle.jdbc.driver.OracleDriver";
private static String url;//="jdbc:oracle:thin:@127.0.0.1:1521:orcloyc";
//使用静态块加载驱动
static{
try {
username=OracleHelper.getValues("username");
password=OracleHelper.getValues("password");
driver=OracleHelper.getValues("driver");
url=OracleHelper.getValues("url");
Class.forName(driver);
System.out.println(username+password+driver+url);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("哈哈");
e.printStackTrace();
}
}
//写一个统一的增删改方法
public static void executeUpdate(String sql,String[] parameters)
{
try
{
ct=DriverManager.getConnection(url,username,password);
ps=ct.prepareStatement(sql);
if(parameters!=null)
{
for(int i=0;i<parameters.length;i++)
{
ps.setString(i+1, parameters[i]);
}
}
//执行
ps.executeUpdate();
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}finally{
close(rs,ps,ct);
}
}
//写一个方法完成查询任务
//sql表示要执行的sql语句
//sql select * from emp where ename=?
public static ResultSet executeQuery(String sql,String[] parameters)
{
//根据实际情况 我们对sql语句的问号赋值
try{
//得到连接
ct=DriverManager.getConnection(url,username,password);
//创建ps对象 sql语句对象
ps=ct.prepareStatement(sql);
//如果parameters不为空 我们才去赋值
if(parameters!=null)
{
for(int i=0;i<parameters.length;i++)
{
ps.setString(i+1, parameters[i]);
}
}
rs=ps.executeQuery();
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}finally{
//close(rs,ps,ct);
}
return rs;
}
public static Connection getCt() {
return ct;
}
public static PreparedStatement getPs() {
return ps;
}
//把关闭资源写成一个函数封装起来;
public static void close(ResultSet rs,Statement ps, Connection ct)
{
if(rs!=null){
try{rs.close();
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
rs=null;
if(ct!=null){
try{ct.close();
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
ct=null;
if(ps!=null){
try{ps.close();
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
ps=null;
}
public static String getValues(String s)
{
Properties pp=new Properties();
FileInputStream fis=null;
String s1=null;
try {
fis=new FileInputStream("dbinfo.properties");
pp.load(fis);
//s1=(String)pp.get(s);
s1=pp.getProperty(s);
System.out.println("username="+s1);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if(fis!=null)
{
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
fis=null;
}
return s1;
}
}
<h1>这是编译的部分结果 以及错误提示:</h1>
username="scott"
username="tiger"
username="oracle.jdbc.driver.OracleDriver"
username="jdbc:oracle:thin:@127.0.0.1:1521:orcloyc"
哈哈
java.lang.ClassNotFoundException: "oracle.jdbc.driver.OracleDriver"
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
at oracle.oyc.OracleHelper.<clinit>(OracleHelper.java:30)
at oracle.oyc.test4.main(test4.java:13)
java.sql.SQLException: No suitable driver found for "jdbc:oracle:thin:@127.0.0.1:1521:orcloyc"
at java.sql.DriverManager.getConnection(DriverManager.java:604)
at java.sql.DriverManager.getConnection(DriverManager.java:221)
at oracle.oyc.OracleHelper.executeQuery(OracleHelper.java:74)
at oracle.oyc.test4.main(test4.java:13)
Exception in thread "main" java.lang.RuntimeException: No suitable driver found for "jdbc:oracle:thin:@127.0.0.1:1521:orcloyc"
at oracle.oyc.OracleHelper.executeQuery(OracleHelper.java:88)
at oracle.oyc.test4.main(test4.java:13)</pre>大哥们不要嫌代码长啊 我先分析下 我调试多次后的结果 和自己得出的一些结论吧 你们再帮我分析下
我最后一个函数 就是用流来读取 外面的配置文件首先 如果 我将username driver等 写死的话 就是不从外面读取的话 不出问题 调用这个类的函数 运行正常;
然后 我在getvalues这个函数中 打印了结果 确实读取到了
我在静态代码块中的赋值 最后结果也读取到了
但是 最后打印出了 我放在catch语句中的 “哈哈” 而且 加载驱动之前的一句打印语句也没出来
就是说 错就出在 class.forName(driver)这句,,
这句话 到底错在哪了,,
我driver也赋值了啊 到底是错在哪 我很纳闷
各位大哥 帮我看看呗
谢谢哈
<pre>
public class OracleHelper {
//定义三个变量
private static Connection ct=null;
private static PreparedStatement ps=null;
private static ResultSet rs=null;
//连接数据库的用户名 密码 URL 驱动
//说明: 在实际开发中,我们往往把这些变量写到一个外部文件中去,
//当文件启动的时候, 我们读入这些配置信息 java.util.Properties
private static String username;//="scott";
private static String password;//="tiger";
private static String driver;//="oracle.jdbc.driver.OracleDriver";
private static String url;//="jdbc:oracle:thin:@127.0.0.1:1521:orcloyc";
//使用静态块加载驱动
static{
try {
username=OracleHelper.getValues("username");
password=OracleHelper.getValues("password");
driver=OracleHelper.getValues("driver");
url=OracleHelper.getValues("url");
Class.forName(driver);
System.out.println(username+password+driver+url);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("哈哈");
e.printStackTrace();
}
}
//写一个统一的增删改方法
public static void executeUpdate(String sql,String[] parameters)
{
try
{
ct=DriverManager.getConnection(url,username,password);
ps=ct.prepareStatement(sql);
if(parameters!=null)
{
for(int i=0;i<parameters.length;i++)
{
ps.setString(i+1, parameters[i]);
}
}
//执行
ps.executeUpdate();
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}finally{
close(rs,ps,ct);
}
}
//写一个方法完成查询任务
//sql表示要执行的sql语句
//sql select * from emp where ename=?
public static ResultSet executeQuery(String sql,String[] parameters)
{
//根据实际情况 我们对sql语句的问号赋值
try{
//得到连接
ct=DriverManager.getConnection(url,username,password);
//创建ps对象 sql语句对象
ps=ct.prepareStatement(sql);
//如果parameters不为空 我们才去赋值
if(parameters!=null)
{
for(int i=0;i<parameters.length;i++)
{
ps.setString(i+1, parameters[i]);
}
}
rs=ps.executeQuery();
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}finally{
//close(rs,ps,ct);
}
return rs;
}
public static Connection getCt() {
return ct;
}
public static PreparedStatement getPs() {
return ps;
}
//把关闭资源写成一个函数封装起来;
public static void close(ResultSet rs,Statement ps, Connection ct)
{
if(rs!=null){
try{rs.close();
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
rs=null;
if(ct!=null){
try{ct.close();
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
ct=null;
if(ps!=null){
try{ps.close();
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
ps=null;
}
public static String getValues(String s)
{
Properties pp=new Properties();
FileInputStream fis=null;
String s1=null;
try {
fis=new FileInputStream("dbinfo.properties");
pp.load(fis);
//s1=(String)pp.get(s);
s1=pp.getProperty(s);
System.out.println("username="+s1);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if(fis!=null)
{
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
fis=null;
}
return s1;
}
}
<h1>这是编译的部分结果 以及错误提示:</h1>
username="scott"
username="tiger"
username="oracle.jdbc.driver.OracleDriver"
username="jdbc:oracle:thin:@127.0.0.1:1521:orcloyc"
哈哈
java.lang.ClassNotFoundException: "oracle.jdbc.driver.OracleDriver"
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
at oracle.oyc.OracleHelper.<clinit>(OracleHelper.java:30)
at oracle.oyc.test4.main(test4.java:13)
java.sql.SQLException: No suitable driver found for "jdbc:oracle:thin:@127.0.0.1:1521:orcloyc"
at java.sql.DriverManager.getConnection(DriverManager.java:604)
at java.sql.DriverManager.getConnection(DriverManager.java:221)
at oracle.oyc.OracleHelper.executeQuery(OracleHelper.java:74)
at oracle.oyc.test4.main(test4.java:13)
Exception in thread "main" java.lang.RuntimeException: No suitable driver found for "jdbc:oracle:thin:@127.0.0.1:1521:orcloyc"
at oracle.oyc.OracleHelper.executeQuery(OracleHelper.java:88)
at oracle.oyc.test4.main(test4.java:13)</pre>大哥们不要嫌代码长啊 我先分析下 我调试多次后的结果 和自己得出的一些结论吧 你们再帮我分析下
我最后一个函数 就是用流来读取 外面的配置文件首先 如果 我将username driver等 写死的话 就是不从外面读取的话 不出问题 调用这个类的函数 运行正常;
然后 我在getvalues这个函数中 打印了结果 确实读取到了
我在静态代码块中的赋值 最后结果也读取到了
但是 最后打印出了 我放在catch语句中的 “哈哈” 而且 加载驱动之前的一句打印语句也没出来
就是说 错就出在 class.forName(driver)这句,,
这句话 到底错在哪了,,
我driver也赋值了啊 到底是错在哪 我很纳闷
各位大哥 帮我看看呗
谢谢哈
2 检查下你的dbinfo.properties文件中的driver
3 fis=new FileInputStream("dbinfo.properties") 里的路径错误
2这个driver路径我 一直都是赋值黏贴的 而且我反复检查了N遍 没错
3路径不会出错的 因为我打印结果已经说明了 我读取到了
下面我在给你我 改动后的 打印结果
这是getvalue函数中的一点小改动System.out.println("username="+s1)改成System.out.println(s+"="+s1);
try {
fis=new FileInputStream("dbinfo.properties");
pp.load(fis);
//s1=(String)pp.get(s);
s1=pp.getProperty(s);
System.out.println(s+"="+s1);第二点 就是,在赋值完后 加了一条打印语句 以精确查找出错位置
try {
username=OracleHelper.getValues("username");
password=OracleHelper.getValues("password");
driver=OracleHelper.getValues("driver");
url=OracleHelper.getValues("url");
System.out.println(username+password+driver+url+"--------------------");
Class.forName(driver);
System.out.println(username+password+driver+url);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("哈哈");
e.printStackTrace();
3 这是输出结果
username="scott"
password="tiger"
driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:orcloyc"
"scott""tiger""oracle.jdbc.driver.OracleDriver""jdbc:oracle:thin:@127.0.0.1:1521:orcloyc"--------------------
哈哈
java.lang.ClassNotFoundException: "oracle.jdbc.driver.OracleDriver"
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
at oracle.oyc.OracleHelper.<clinit>(OracleHelper.java:32)
at oracle.oyc.test4.main(test4.java:13)
java.sql.SQLException: No suitable driver found for "jdbc:oracle:thin:@127.0.0.1:1521:orcloyc"
at java.sql.DriverManager.getConnection(DriverManager.java:604)
at java.sql.DriverManager.getConnection(DriverManager.java:221)
at oracle.oyc.OracleHelper.executeQuery(OracleHelper.java:76)
at oracle.oyc.test4.main(test4.java:13)
Exception in thread "main" java.lang.RuntimeException: No suitable driver found for "jdbc:oracle:thin:@127.0.0.1:1521:orcloyc"
at oracle.oyc.OracleHelper.executeQuery(OracleHelper.java:90)
at oracle.oyc.test4.main(test4.java:13)
看看你类库是不是重复了不行重新构建一个新的程序测试下了