IT源码网

错误集锦讲解

sanshao 2021年04月03日 程序员 127 0

引言

JDBC中遇到的错误集锦

具体错误

Exception in thread “main” java.lang.NullPointerException(主线程里预料之外的错误,java ,lang包之下的空指针错误)
在这里插入图片描述

线程的作用:

在这里插入图片描述
启动一个线程,在主线程中若报错或者阻塞,将不会继续执行下去,因此需要一开始就启动线程来执行下面的,这样多线程执行,一个被阻塞,另外一个依然能执行。

在这里插入图片描述

同时新开一个删除线程,同样报空指针错误,且都是箭头所指错误,此时本帅怀疑是ps为空导致的错误,本帅先检查了一下可以运行的插入功能,发现了问题所在在这里插入图片描述

package com.example.paoduantui.JDBC.testJDBC; 
 
 
import android.os.SystemClock; 
 
import com.example.paoduantui.JDBC.JDBCDAO.TaskDBDao; 
import com.example.paoduantui.JDBC.JDBCDAO.UserDBDao; 
import com.example.paoduantui.JDBC.JDBCDB.TaskDB; 
import com.example.paoduantui.JDBC.JDBCDB.UserDB; 
 
import java.util.List; 
 
//测试JDBCDao类 
public class testJDBCDao { 
 
       public static void main(String[] args){ 
 
           //TaskDB taskDB = new TaskDB('1','1',"张大帅比",'1',"张斌真帅","","2015-06-14","2015-06-14",'7'); 
 
           //int result=TaskDBDao.insert(taskDB); 
           //if(result==1) System.out.print("插入数据成功!"); 
 
           new Runnable() { 
               @Override 
               public void run() { 
                   List<UserDB> list = UserDBDao.getById(1,0); 
                   for(int i= 0;i<list.size();i++){ 
                       System.out.println(list.get(i).getId()+list.get(i).getUsername()); 
                   } 
               } 
           }.run(); 
 
           new Runnable() { 
               @Override 
               public void run() { 
                   TaskDB taskDB1=new TaskDB(49,1,"张斌斌",1,"张斌斌摔倒的","","","",7); 
                   int result1 = TaskDBDao.updateById(taskDB1); 
                   System.out.println("删除数据成功!!"+taskDB1.getTaskid()); 
               } 
           }.run(); 
 
           TaskDB taskDB1=new TaskDB(4,1,"张斌斌",1,"张斌斌摔倒的","","","",7); 
           int result1 = TaskDBDao.updateById(taskDB1); 
           System.out.println("更新数据成功!!"+taskDB1.getTaskid()); 
 
 
 
       } 
 
} 

在这里插入图片描述
本帅将Dao类中的连接设置为final静态值,让其在类中所有方法可调用

在这里插入图片描述
此时空指针问题解决了,但出现了另一个问题

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.(没有允许下一个连接关闭的操作的连接)
原因是,当把连接设置为静态加载,并且为final时,运行完一个数据库操作如insert后就关闭了连接,下一个数据库操作如update时,再次关闭连接,此时没有可以关闭的连接了,因为在运行完insert时就关闭了此连接。
所以正确写法应该是给每个数据库操作分配一个连接,运行完后关闭。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
至此问题就解决了
在这里插入图片描述

在testJDBCDao中测试以下代码

package com.example.paoduantui.JDBC.testJDBC; 
 
 
import android.os.SystemClock; 
 
import com.example.paoduantui.JDBC.JDBCDAO.TaskDBDao; 
import com.example.paoduantui.JDBC.JDBCDAO.UserDBDao; 
import com.example.paoduantui.JDBC.JDBCDB.TaskDB; 
import com.example.paoduantui.JDBC.JDBCDB.UserDB; 
import com.example.paoduantui.Task; 
 
import java.util.List; 
 
//测试JDBCDao类 
public class testJDBCDao { 
 
       public static void main(String[] args){ 
 
           //插入线程 
           new Runnable() { 
               @Override 
               public void run() { 
                   TaskDB taskDB = new TaskDB(1,1,"张大帅比",'1',"张斌真帅","","2015-06-14","2015-06-14",'7'); 
 
                   int result=TaskDBDao.insert(taskDB); 
                   if(result==1) System.out.print("插入数据成功!"); 
               } 
           }.run(); 
 
            //查询线程 
           new Runnable() { 
               @Override 
               public void run() { 
                   List<TaskDB> list = TaskDBDao.getAll(); 
                   for(int i= 0;i<list.size();i++){ 
                       System.out.println(list.get(i).getId()+list.get(i).getUsername()); 
                   } 
               } 
           }.run(); 
 
 
           //删除线程 
           new Runnable() { 
               @Override 
               public void run() { 
                   TaskDB taskDB1=new TaskDB(9,1,"张斌斌",1,"张斌斌摔倒的","","","",7); 
                   int result1 = TaskDBDao.deleteByTaskId(taskDB1); 
                   if(result1==1)System.out.println("删除数据成功!!"+taskDB1.getTaskid()); 
               } 
           }.run(); 
 
           //更新线程 
           new Runnable() { 
               @Override 
               public void run() { 
                   TaskDB taskDB1=new TaskDB(1,1,"张斌斌",1,"张斌斌摔倒的","","","",7); 
                   int result1 = TaskDBDao.updateByTaskId(taskDB1); 
                   System.out.println("更新数据成功!!"+taskDB1.getTaskid()); 
               } 
           }.run(); 
 
 
       } 
 
} 

结果
在这里插入图片描述
在这里插入图片描述
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException 最变态的sql语法错误

解决方案:在phpMyAdmin中运行,若有错误,则使用phpMyAdmin可用的语句改写。

在这里插入图片描述
在这里插入图片描述
可以插入,修改报错格式为上述格式

在这里插入图片描述
此时,可以插入数据啦!问题解决!!
在这里插入图片描述

总结:

数据库:

  1. 首先建库建表(为完成数据库编码设置的先进行配置)
  1. 首先建库建表(未完成数据库编码设置的先进行配置数据库的编码)
  2. 创建与表字段一致的实体类DB(字段作为成员变量,设置构造方法,getter,setter方法)
  3. 创建数据库表操作的实体Dao类(一般为增删改查,查为按条件查,按id查,获取全部(按时间降序排列)等)
  4. 创建main方法测试
  5. 创建Activity,在activity中测试(main方法为入口,Activity也能被调用启动,也即是,能被main方法执行调用的就能被Activity调用)
发布评论

分享到:

IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Android通过JDBC访问远程mysql数据库中的数据实例(在虚拟机上跑),以及phpMyAdmin数据库的编码问题讲解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。