На данный вопрос уже ответили:
При компиляции выдаёт вот такую ошибку:
Exception in thread "main" java.lang.NullPointerException at laba1.Laba1.showTable(Laba1.java:37) at laba1.Laba1.main(Laba1.java:178) C:\Users\Anna\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1 BUILD FAILED (total time: 21 seconds)
Код программы:
package laba1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class Laba1 {
private Connection con;
public boolean setConnection(String name, String pass) {//устанавливаем соединение с базой,передаем свой логин и пароль
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
return false;
}
try {
con = DriverManager.getConnection("jdbc:oracle:thin:@DESKTOP-34UDS4O:1522:XE [SYS as sysdba on ANONYMOUS]",name, pass);
} catch (SQLException e) {
if(e.getErrorCode()==1017){
System.out.println("Невірний логін чи пароль");
return false;
}
}
return true;
}
public void closeConnection() throws SQLException{//закрываем соединение
con.close();
}
public void showTable() throws SQLException{//вывод таблицы на экран
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM sorts");
System.out.println("+--+----------------+----------+----------+-------------+");
System.out.printf("|%3s %16s %9s %6s %13s%n", "Id|", "Назва сорту |", "Сезон|","Вегетаційний період|","Середня врожайність|");
System.out.println("+--+----------------+----------+----------+-------------+");
while(rs.next()){
System.out.printf("|%3s %16s %10s %10s %13s%n",rs.getInt(1)+"|",rs.getString(2)+"|",rs.getInt(3)+"|",rs.getInt(4)+"|",rs.getString(5)+"|");
}
System.out.println("+--+----------------+----------+----------+-------------+");
st.close();
rs.close();
}
public void populationLessThan1() throws SQLException{//области с населением до 1млн
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT name_sort, FROM sorts WHERE period<250");
System.out.print("Озимі сорти з вегетаційним періодом до 250: ");
while(rs.next()){
System.out.print(rs.getString(1)+"("+rs.getInt(2)+");");
}
System.out.println();
st.close();
rs.close();
}
public void avgPopulation() throws SQLException{//ищем среднее кол-во населения
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT MIN(average_yield) FROM sorts");
while(rs.next()){
System.out.println("Сорт з мінімальною і максимальною врожайністю: "+rs.getInt(1)+" чол.");
}
st.close();
rs.close();
}
public boolean isIdReal(int id) throws SQLException{//проверяем существует ли поле с таким id в таблице
Statement st = con.createStatement();
ResultSet rs1 = st.executeQuery("SELECT COUNT(name_sorts) FROM sorts WHERE id="+id);
rs1.next();
if(rs1.getInt(1)>0) return true;
else return false;
}
public void edit() throws SQLException{ //редактирование данных
int id;
Scanner sc = new Scanner(System.in);
Statement st = con.createStatement();
System.out.print("Введіть ID поля або 'Exit' для відміни: ");
while(true){
if(sc.hasNextInt()){
id = sc.nextInt();
if(!isIdReal(id)){
System.out.print("Такого ID не існує! Введіть ще раз: ");
continue;
}
System.out.print("Введіть назву колонки або 'Exit': ");
while(true){
String value = null;
Integer intValue = null;
String column = sc.nextLine();
if(column.equalsIgnoreCase("name_sorts")||column.equalsIgnoreCase("average_yield")){
System.out.println("Введіть нове значення: ");
value=sc.nextLine();
st.execute("UPDATE Sorts SET "+column+" = '"+value+"' WHERE id = "+id);
System.out.println("Дані оновлено");
return;
}
else if(column.equalsIgnoreCase("sezon")||column.equalsIgnoreCase("period")){
System.out.println("Введіть нове значення: ");
while(true){
if(sc.hasNextInt()){
intValue=sc.nextInt();
st.execute("UPDATE Sorts SET "+column+" = '"+intValue+"' WHERE id = "+id);
System.out.println("Дані оновлено");
return;
}
else {
System.out.println("Введіть число: ");
sc.next();
}
}
}
else if(column.equalsIgnoreCase("Exit")) {
return;
}
else{
System.out.print("Такої колонки не існує, введіть ще раз: ");
}
}
}
else if(sc.hasNextLine()){
if(sc.nextLine().equalsIgnoreCase("Exit")){
return;
}
else {
System.out.print("Введіть число або 'Exit' для відміни: ");
}
}
else {
System.out.print("Введіть число або 'Exit' для відміни: ");
sc.next();
}
}
}public void insertData() throws SQLException{//заносим значения в таблицу
Statement st = con.createStatement();
st.execute("insert into sorts values (null, 'Botvm','Odessa', 2395000,33314)");
st.execute("insert into sorts values (null, 'Dnipropetrovska','Dnipro', 3285000,31923)");
st.execute("insert into sorts values (null, 'Chernigivska','Chernigiv', 1054000,31903)");
st.execute("insert into sorts values (null, 'Kharkivska','Kharkiv', 2696000,31418)");
st.execute("insert into sorts values (null, 'Zhytomyrska','Zhytomyr', 1233000,29827)");
st.execute("insert into sorts values (null, 'Polravska','Poltava', 1462000,28750)");
st.execute("insert into sorts values (null, 'Khersonska','Kherson', 1055000,28461)");
st.execute("insert into sorts values (null, 'Kyivska','Kyiv', 1732000,28121)");
st.execute("insert into sorts values (null, 'Kirovogradska','Kropyvnytsky',999000,24588)");
st.execute("insert into sorts values (null, 'Chernovytska','Chernyvtsy', 906000,8906)");
System.out.println("Додано!");
}
public void clearTable() throws SQLException{//удаляем все из таблицы
Statement st = con.createStatement();
st.execute("DELETE FROM sorts");
}
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Laba1 l = new Laba1();
Scanner sc = new Scanner(System.in);
String name;
String pass;
boolean end = false;
do{
System.out.print("Введіть логін: ");
name = sc.nextLine();
System.out.print("Введіть пароль: ");
pass = sc.nextLine();
}while(!l.setConnection(name, pass));
System.out.println("З'єднання встановлено!");
do{
String num;
System.out.println("Виберіть дію:\n1 - показати таблицю\n2 - додати дані\n3 - показати області з населенням до 1млн.\n4 - показати середню кількість населення\n5 - очистити таблицю\n6 - змінити дані\n0 - вийти");
num = sc.nextLine();
switch(num){
case "1":
l.showTable();
break;
case "2":
l.insertData();
break;
case "3":
l.populationLessThan1();
break;
case "4":
l.avgPopulation();
break;
case "5":
l.clearTable();
break;
case "6":
l.edit();
break;
case "0":
l.closeConnection();
end = true;
break;
default:
System.out.println("Такої команди не існує!");
break;
}
}
while(!end);
}
}
В методе setConnection()
во втором try-catch
вы ловите все SQLException
-ы, но false возвращаете только если этот эксепшын связан с ошибкой логина-пароля (1017). Остальные вы не обрабатываете и метод при другом SQLException
возвращает true
. При этом con
остается не проинициализированной (null
). Отсюда и NPE
.
Перенесите return false;
ниже за фигурную скобку!
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Spring Data JPA – это не реализация JPA, это абстракция доступа к данным БД
Пробую высветлить несколько маркеров на карте но не понимаю как правильно создать запрос к Json помогите пожалуста