错误集锦

本文是JDBC错误集锦,介绍了几种常见错误。如主线程的空指针错误,通过将Dao类连接设为final静态值解决;但又出现连接关闭后操作错误,需为每个数据库操作分配连接并运行完关闭。还提及SQL语法错误,可在phpMyAdmin改写语句解决。最后总结了数据库操作步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

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调用)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值