Проблема была: Не удается получить только что вставленные данные из таблицы. Из сообщения об ошибке видно, что он не видит первый столбец. Я знаю, что столбец есть, и данные были вставлены. Я проверил базу данных. Я проверил, имеет ли столбец Number
скрытое пространство в имени. Нет, нет.не может получить данные из базы данных
Пробовал: Отладил каждую линию, и все было хорошо вместе с вводом данных в базу данных. Найдено вопрос почти в конце кода:
rs1.next();
String s1 = rs1.getString(1);
Я попытался написать
rs1.first();
String s1 = rs1.getString(1);
или
rs1.first();
String s1 = rs1.getString("Number");
Ниже я разместил мой окончательный код, который работает правильно и я могу вставить данные в таблицу и отобразить в браузере.
package mypackage;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Collections;
import java.util.LinkedList;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
@Path("/query")
public class CList {
private LinkedList<SMember> contacts;
public CList() {
contacts = new LinkedList();
}
@GET
@Path("/{CList}")
public Response addCLocation(@QueryParam("employeeId") String eId) throws SQLException{
String dataSourceName = "DBname";
String dbURL = "jdbc:mysql://localhost:3306/" + dataSourceName;
String result = "";
Connection con = null;
PreparedStatement ps0 = null, ps = null;
ResultSet rs = null, rs1 = null;
String id = eId;
try {
try{
//Database Connector Driver
Class.forName("com.mysql.jdbc.Driver");
//Connection variables: dbPath, userName, password
con = (Connection)
DriverManager.getConnection(dbURL,"someusername","somepassword");
System.out.println("We are connected to database");
//SQL Statement to Execute
System.out.print(id);
s = con.prepareStatement("SELECT 1 FROM CList WHERE Number=?");
s.setString(1, eId);
rs = s.executeQuery();
//Parse SQL Response
if(!rs.next()) {
SMember sm = new SMember();
ps = (PreparedStatement) con.prepareStatement("INSERT
INTO Contact_List (Number, First_Name, Last_Name, Phone_Number) " +
"VALUES (?,?,?,?)");
ps.setString(1,sm.getEmployeeID());
ps.setString(2,sm.getFirstName());
ps.setString(3,sm.getLastName());
ps.setString(4,sm.getPhone());
ps.executeUpdate();
ps = con.prepareStatement("SELECT Number, First_Name,
Last_Name, Phone_Number FROM CList
WHERE Number=" + eId);
rs1 = ps.executeQuery();
while(rs1.next()){
result = "[Added contact to contact list.
Number: " + rs1.getString(1) +
"][First_Name: " + rs1.getString(2) +
"][Last_name: " + rs1.getString(3) +
"][Phone_Number: " + rs1.getString(4) +
"]\n";
}
}
else {
result = "[Contact is already on the list]";
}
}
catch(Exception e) {
System.out.println("Can not connect to database");
e.printStackTrace();
}
finally {
//Close Database Connection
ps0.close();
ps.close();
con.close();
}
}
catch(Exception e) {
System.out.println(e);
}
//Return the Result to Browser
return Response.status(1000).entity(result).build();
}
Таблица
1234 номер является уникальным, и это число, которое я хочу получить.
Вы видите номер должен быть уникальным. До сих пор я беру данные из класса SMember, и он всегда содержит те же данные. Цель моего вопроса - просто указать информацию, которую я вставил несколько секунд назад.
Также есть класс SMember, который я не размещал здесь, и в его конструкторе я инициализирую номер, имя, фамилию и номер телефона. Цель тестирования. Я сделал все рекомендованные изменения, но проблема остается прежней.
PM 77-1 Как вы его отредактировали? Я не хочу делать такие же ошибки в будущем. – user1282256