J'utilise ORACLE9i et Oracle8 depuis longtemps. J'ai noté ici les problèmes qui nécessitent une attention particulière lors de l'utilisation de JSP, à titre de référence uniquement.
1. Comment gérer les gros types de Clob et BLOB.
CLOB peut être utilisé pour stocker des données texte volumineuses et peut stocker jusqu'à 4 Go de données. C'est relativement courant dans le développement d'applications. La classe sql.Clob fournie par Java correspond. Il fournit deux méthodes pour lire les données de Clob :
La méthode getCharacterStream() renvoie le flux d'entrée codé en Unicode (objet java.io.Reader).
La méthode getAsciiStream() renvoie le flux d'entrée codé en ASCII (java. io.InputStream).
Donc, si vous pouvez stocker des caractères chinois, vous devez
maintenant utiliser la méthode précédente et laissez-moi apprendre comment utiliser CLOB étape par étape.
Tout d'abord, créez une table avec des champs CLOB :
créer un test de table (id INTEGER, content clob);
Ensuite, nous insérons un enregistrement dans cette table via JSP, puis l'obtenons et l'affichons:
Les
points suivants à noter sont les suivants:
1) Les données de type Clob ne peuvent pas être directement insérées. et doit être donné en premier via la méthode empty_clob(). Il alloue un localisateur (de la même manière, utilisez la fonction empty_blob() pour allouer un localisateur aux blobs). Ensuite, sélectionnez-le (bien sûr, il n'a aucune donnée pour le moment). mais le jeu de résultats n'est pas vide), obtenez un objet Clob et modifiez le contenu de l'objet pour qu'il réponde à nos besoins, puis l'enregistrement de ligne est mis à jour via la méthode de mise à jour
2) Lors de la modification d'un enregistrement contenant le type lob via select, la ligne doit être verrouillée (implémentée via le mot-clé for update), sinon Oracle signalera une erreur
3) Juste si l'enregistrement inséré est sélectionné pour la mise à jour, une erreur de "violation de l'ordre de lecture" se produira. La solution consiste à définir l'option automatique. fonction de soumission sur false, c'est-à-dire que la soumission automatique n'est pas autorisée, puis validez-la, puis sélectionnez-la. Voici la fonction des lignes //* ci-dessus dans ce code.
Ensuite, nous lirons l'enregistrement nouvellement inséré à partir de. base de données et affichez-le :
2. Problème d'encodage
Parce que les développeurs de JAVA sont étrangers, leur support pour le chinois n'est pas très bon. D'accord, cela a causé beaucoup de maux de tête à beaucoup d'entre nous, c'est de cela que nous parlons à propos des caractères chinois. Encodage.Je n'entrerai pas dans les détails de certaines spécifications d'encodage des caractères chinois. Je parlerai principalement de la façon de se connecter à une base de données Oracle. Quelques petits problèmes, mais ces petits problèmes sont très gênants.
1. La question chinoise insérée dans la base de données doit être convertie en encodage
. 2. Le chinois lu dans la base de données doit être converti en encodage.
Regardons un code JAVA encodé :
//ECov.java
import java.io.UnsupportedEncodingExceptionpublic
;
class ECov
{
public static String asc2gb(String asc){
String ret;
if(asc==null)return asc;
try{
ret=new String(asc.getBytes("ISO8859_1"),"GB2312"
}
catch(UnsupportedEncodingException)
;e ){
ret=asc;
}
return ret;
}
public static String gb2asc(String gb){
String ret;
if(gb==null)return gb;
try{
ret=new String(gb.getBytes("GB2312"), " ISO8859_1");
}
catch(UnsupportedEncodingException e){
ret=gb;
}
return ret;
}
public static int byte2int(byte b){
return ((-1)>>>>24
)&
b
;
signification de ce code C'est-à-dire que les deux méthodes sont combinées en une seule.
ECov.gb2asc(arg) doit être utilisé lors de l'insertion dans la base de données, et ECov.asc2gb(arg) doit être utilisé lors de la lecture. Le point le plus critique est qu'Oracle semble reconnaître uniquement l'encodage au format ISO8859_1 (juste mon idée).
3. Quelques petits détails
1. Il s'agit de setAutoCommit(true ou false), qui est la fonction commit() couramment utilisée dans sqlPlus. Si vous utilisez true, n'utilisez pas commit(), sinon vous utiliserez toujours la méthode commit(). .
2. Le traitement des types de date n'est en fait pas aussi simple que setDate() et getDate() comme on l'imagine. Il y a de grosses failles au milieu. Vous trouverez cela très amusant si vous le déboguez vous-même.
3. Il est préférable d'utiliser la technologie de pool de connexions dans la base de données. C'est une bonne méthode d'utiliser un environnement J2EE standard et une technologie JNDI simple.