18. september 2001 - 10:35Der er
9 kommentarer og 2 løsninger
Indsæt i Access2000 notat-felt som string - hvorfor virker det ikke?
Vi øver med JDBC:ODBC connection til Access2000. Det går fint med insert og select, SÅ LÆNGE vi ikke prøver at indsætte en String i et felt, der er defineret som notatfelt - (memo) Hvordan indsætter man tekst i sådan et felt med et \"INSERT INTO (Memofeltet) values (\"Her er en ufattelig lang tekst\")
- Og hvordan arbejder man generelt bedst med memofelt-længder på op til 65.000 tegn i Java, som string???
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
INSERT INTO Members ( [LongText] ) values (\'Her er en lang tekst\')
Det virker både med pinger (\') og med anførselstegn (\") rundt om teksten
Men vi kan generelt heller ikke tildele indholdet af et memo-felt til en String i java, da fejler systemet, uden at gå i den exception vi prøver at stille op for det.
Vi har altså følgende situation: - Vi kan ikke skrive i et memo-felt i Access
- Vi kan godt SELECTE værdien af et memofelt og skrive på skærm med: System.out.println(resultSet.getString(\"LongText\") men... - Vi kan ikke sige: String copyLongText = resultSet.getString(\"LongText\"); Dette giver følgende fejl: java.sql.SQLException: No data found , men data ER der jo, for jeg kan println med dem...?
Det er sådan set også kun opstarten mht access - systemet skal køre på MS SQL 2000, men da har man jo en pendant til memofeltet, så derfor skulle det helst kunne køre - desuden er vi jo så \"platformsuafhængige\" og skal gerne kunne bruge systemet overfor en hvilken som helst DB... - Nå, men jeg håber der er andre, der kan se, hvad jeg gør galt, eller som definitivt ved, at jeg er i en dead-end...
Har du prøvet at kigge på metadata fra dit resultset:
ResultSetMetaData rsmd = resultSet.getMetaData(); for (int i = 1, max = rsmd.getColumnCount() ; i <= max ; i++) system.out.println(rsmd.getColumnName(i) + \" \" + rsmd.getColumnClass(i) + \" \" + rsmd.getColumnType(i));
column types vil matche en konstant i java.sql.Types: public class Types { public final static int BIT = -7; public final static int TINYINT = -6; public final static int SMALLINT = 5; public final static int INTEGER = 4; public final static int BIGINT = -5; public final static int FLOAT = 6; public final static int REAL = 7; public final static int DOUBLE = 8; public final static int NUMERIC = 2; public final static int DECIMAL = 3; public final static int CHAR = 1; public final static int VARCHAR = 12; public final static int LONGVARCHAR = -1; public final static int DATE = 91; public final static int TIME = 92; public final static int TIMESTAMP = 93; public final static int BINARY = -2; public final static int VARBINARY = -3; public final static int LONGVARBINARY = -4; public final static int NULL = 0; public final static int OTHER = 1111; public final static int JAVA_OBJECT = 2000; public final static int DISTINCT = 2001; public final static int STRUCT = 2002; public final static int ARRAY = 2003; public final static int BLOB = 2004; public final static int CLOB = 2005; public final static int REF = 2006; }
Hmm...Jeg vil meget gerne have skåret ud i pap. Jeg kan ikke finde nogle eksempler på at anvende BLOB og/eller CLOB, derfor:
jeg ville virkelig kunne bruge, hvis det kunne vises, hvordan man så arbejder med CLOB/BLOB\'erne... Mit LongText-felt er iflg metadataene = -1, dvs. LONGVARCHAR. Hvordan arbejder jeg med den... Er der en, der vil prøve at vise, hvordan man selecter et memofelt i access, og overfører det til en variabel (et objekt).
Prøv at tage dit memo fra dit resultset: Object o = resultSet.getObject(\"Nemo\"); Class[] c = o.getClass().getDeclaredClasses(); for (int i = 0 ; i < c.length ; i++) { String ci = c[i].isInterface() ? \"Interface \" : \"class \"; System.out.println(ci + c[i].getName()); }
Tag den her: Class clazz = resultSet.getObject(\"LongText\").getClass(); while(clazz != null) {
System.out.println(clazz.getName()); Class[] interfaces = clazz.getInterfaces(); for (int i = 0 ; i < interfaces.length ; i++) { System.out.println(\"Interface>\" + interfaces[i].getName()); } clazz = clazz.getSuperclass(); } Hvordan mener den så, det kan repræsenteres?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.