14. september 2003 - 19:19
Der er
25 kommentarer og 1 løsning
Indsæt ved mange til mange relation
Mine tabeller ser sådan her ud: server ------ id_server ip serv_user --------- id_server id_user user ---- id_user nick password Jeg skal indsætte i tabellen server, så der kommer en relation mellem server og user. id_server bliver auto genereret, ip kommer fra brugeren og jeg kender id_user. Hvordan skal indsert syntaksen være ?
Annonceindlæg fra Computerworld it-jobbank
14. september 2003 - 19:25
#1
Du indsætter IP i server, databasen genererer et id_server, du fisker det og indsætter det og id_user i serv_user. 2 ganske almindelige INSERT. Hvordan du fisker det id afhænger lidt af sprog og database.
14. september 2003 - 19:26
#2
det er mysql, men imellem de 2 insert sætninger kunne der komme indput fra en anden bruger
14. september 2003 - 19:27
#3
MySQL har f.eks. LAST_INSERT_ID() funktionen.
14. september 2003 - 19:28
#4
havde tænkt på bare at sige: insert into serv_user values(select max(id_server) from server,id_user);
14. september 2003 - 19:28
#5
JDBC 3.0 (Java 1.4+) har en metode getGeneratedKeys på Statement.
14. september 2003 - 19:29
#6
Både LAST_INSERT_ID og genGeneratedKeys er per Connection og kan derfor håndtere flere sdamtidige brugere.
14. september 2003 - 19:29
#7
SELECT MAX kan derimod *ikke* håndtere flere samtidige brugere.
14. september 2003 - 19:29
#8
Og lad os kalde det for et svar.
14. september 2003 - 19:31
#9
cool nok prøver lige
14. september 2003 - 19:43
#10
Det her virker ikke lige: String query = "insert into server (ip) values ('"+ip+"');"; Statement stmt = conn.createStatement(); stmt.executeUpdate(query); String queryID = "insert into user_server values (LAST_INSERT_ID(),'"+userID+"');"; stmt.executeUpdate(queryID); Og den her virker heller ikke lige, bruger dog bare MySQL's ODBC driver: String query = "insert into server (ip) values ('"+ip+"');"; Statement stmt = conn.createStatement(); stmt.executeUpdate(query); ResultSet RS = stmt.getGeneratedKeys(); while (RS.next()) { String queryID = "insert into user_server values ('"+RS.next()+"','"+userID+"');"; stmt.executeUpdate(queryID); }
14. september 2003 - 19:45
#11
kan heller ikke lige finde info om LAST_INSERT_ID() i mysql doc
14. september 2003 - 19:48
#12
14. september 2003 - 19:49
#13
String queryID = "insert into user_server values ('"+RS.next()+"','"+userID+"');"; skal vel være String queryID = "insert into user_server values ("+RS.getInt(1)+",'"+userID+"');";
14. september 2003 - 19:50
#14
fandt den :) String queryID = "insert into user_server values (select LAST_INSERT_ID(),'"+userID+"');"; virker dog heller ikke
14. september 2003 - 19:50
#15
14. september 2003 - 19:51
#16
Du kan nok ikke skrive sådan en SELECT midt i en INSERT.
14. september 2003 - 19:55
#17
Med java måden får jeg en NullPointerException, virker det også med ODBC adgang ?
14. september 2003 - 20:00
#18
Prøv lige med: stmt.executeUpdate(query, Statement.RETURN_GENERATED_KEYS);
14. september 2003 - 20:01
#19
Nej jeg tror ikke på at JDBC ODBC bridgen understøtter den slags. MySQL JDBC driver gør. Jævnfør f.eks. eksemplet i mit 19:50:13 link !
14. september 2003 - 20:01
#20
hehe den havde jeg lige prøvet. ligger lige Connector/J 3.0 ind
14. september 2003 - 20:10
#21
Du skal på version 3.x for at getGeneratedKeys virker. SELECT LAST_INSERT_ID() har virket i hundrede år.
14. september 2003 - 20:15
#22
har lagt connector i j2sdk1.4.2\jre\lib\ext
og prøver med, men det virker ikke
String driver = "com.mysql.jdbc.Driver";
Class.forName(driver).newInstance();
Connection conn = DriverManager.getConnection("jdbc:
mysql://localhost/csadmin?user=xxx&password=xxx" );
Den siger org.apache.jasper.JasperException: com.mysql.jdbc.Driver
14. september 2003 - 20:18
#23
Prøv lige og smid den i webapps\xxxx\WEB-INF\lib ? PS: Du har pakket jar filen ud af zip filen ikke ?
14. september 2003 - 20:18
#24
Ok en gang tomcat reboot hjalp lidt nu er fejlen org.apache.jasper.JasperException: General error, message from server: "Column count doesn't match value count at row 1"
14. september 2003 - 20:19
#25
findes der noget javadoc over connector ?
14. september 2003 - 20:33
#26
så nu virker det tak endnu en gang arne Det skulle være sådan her: Statement stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_UPDATABLE); stmt.executeUpdate(query,Statement.RETURN_GENERATED_KEYS); ResultSet RS = stmt.getGeneratedKeys(); if (RS.next()) { String queryID = "insert into user_server (id_server,id_user) values ("+RS.getInt(1)+","+userID+");"; stmt.executeUpdate(queryID); }
Computerworld tilbyder specialiserede kurser i database-management